龙空技术网

一文带你搞懂SpringBoot日志如何配置?

从程序员到架构师 166

前言:

此时你们对“nginx日志配置详解”大概比较着重,各位老铁们都需要学习一些“nginx日志配置详解”的相关文章。那么小编同时在网上网罗了一些有关“nginx日志配置详解””的相关资讯,希望看官们能喜欢,我们一起来学习一下吧!

日志服务通常在产品设计的时候,不会被单独作为一个模块来说明,但是在很多系统架构中我们都会看到架构师在构建系统架构的时候,会将日志服务考虑在其中,当然,在现在这样的大数据背景下,很多的用户业务逻辑操作都是体现在日志中,例如在Nginx日志中可以看到请求接口访问情况,在MySQL的日志中可以分析出那些SQL执行的时间过长等等的。

那么既然这样,下面我们就来看看在Spring Boot中我们如何来处理业务日志吧?

这里需要说明 Spring Boot 的版本是 2.7.5 版本,不是最新版本,但原理都是一样。

日志级别

在讨论日志处理之前,首先我们先来了解一下什么是日志级别,常见的日志级别从低到高依次为 TRACE,DEBUG,INFO,WARN,ERROR,FATAL。

那么如何理解这个日志级别呢?一般来讲,我们在业务中处理中设置的日志级别都是INFO级别的日志,也就是说,当我们将日志设置成了INFO级别之后,比它级别更低的日志就看不到了,为什么这么做呢?

首先,日志分级别的话可以帮助开发者能够快速的定位到一些程序中出现的问题。不同级别的问题也就是代表着问题的严重性。

其次,在开发中不可能我们将所有的日志都进行收集,我们可以通过设置日志级别来排除一些在正常运行过程中其实不是那么重要的日志。

第三,通过日志的采集和分析,能够帮助我们监控应用程序的运行状态。

当然了在实际开发中日志级别的控制还可以用来做很多很多的事情,这里是笔者认为的日志分级别的几个关键点。

常见的日志框架

在日常开发中,常用到的日志框架有Log4j、LogBack、Log4j2。当然还有一些老的框架中还有一些其他的日志框架。

在这些框架中,可能听过最多的就是Log4j了吧,因为在Spring开发中我们会经常性的听到这个框架,而在Spring Boot中默认使用的是LogBack。

LogBack这个框架是基于Log4j框架开发出来的另一个开源的日志框架,与LogBack相比,性能不知道提升了多少倍,并且LogBack初始化加载的内存也变小了,或许这也是Spring Boot将其作为默认的日志框架的原因之一吧。

而Log4j2 是要比LogBack出现要晚,据官网的介绍,性能要比LogBack要更好,但是具体咱也没试过,所以这个就不需要再纠结了。因为日志框架太多了,那么如何找到一款适合项目的日志框架才是关键。下面我们就先来研究一下Spring Boot默认日志框架LogBack。

Spring Boot的默认日志框架

在上文中我们介绍了在SpringBoot中的默认的日志框架是LogBack,既然能够作为Spring Boot的默认日志框架,那么在实际的性能上,一定是经过了认证的研究的。所以在一般的开发过程中,建议先不要更换。

实际上,在Spring Boot应用创建好之后,框架就默认的将日志的相关引用也给加进去了,这就是Spring Boot的自动化配置所带来的高效之处,想想在Spring项目中还需要自己去配置依赖,引用日志组件等操作,Spring Boot框架确实是提供了很多便捷的操作。

在我们启动了Spring Boot项目之后,默认日志的级别是INFO,并且我们可以在日志中看到如下的一些内容。

日志时间,精确到了毫秒级别日志级别,默认是INFO进程ID打印了日志分隔符线程名称Logger的名称具体的日志内容如何在代码中去使用日志呢?

首先在代码中添加日志,第一个目的就是为了能够追溯到业务操作流程相关信息,例如在一个IF条件判断的时候,在异常捕获的时候,都是为了能够更好的帮助我们定位问题,解决问题。那么我们如何在代码中添加日志操作呢?

在代码中添加日志操作的方式,一般来说有两种,一种是代码的方式,一种是通过Lombok注解的方式。

代码的方式

可以在业务逻辑代码中添加如下的内容。

private final Logger logger  = LoggerFactory.getLogger(TestController.class);

通过Lombok方式

想要在项目中使用Lombok,就需要先添加Lombok的相关依赖。如下所示,当然对于Lombok在开发过程中使用者对于它的评价是褒贬不一的。

<dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId></dependency>

添加完成依赖之后,就可以通过如下的方式来使用日志了。

@RestController@Slf4jpublic class TestController {       @GetMapping("/test")    public String test(){        log.info("这个是一个INFO级别的日志");        return "Hello World!";    }}

看上去非常简单。使用起来也是非常方便。

如何调整日志级别呢?

既然Spring Boot提供了自动配置,那么就一定提供了日志级别的修改方式,我们可以通过如下的配置来调整SpringBoot应用的默认日志级别。

logging: level:   root:DEBUG

如图所示,在我们输入调整日志级别之后,在配置文件中有如下的提示。也就是说,我们可以将整个项目的级别给设置成DEBUG级别,或者是我们可以将某个模块设置成对应的级别。

root:表示整个项目的日志级别sql:数据库操作的日志级别web:Web层日志操作级别其他包名,就是包名下的内容日志操作级别

我们可以根据自己的需要来为不同的包,不同的模块来设置合适的日志级别。

如何修改日志输出文件?

在Spring Boot中日志默认是输出到控制台中的,显然这种方式在生产环境中是不被允许的,所以我们需要去配置日志的输出路径。如下所示。

logging:  level:    root: debug  file:    path: ./log/    name: spring.log

可以通过logging.file.path和loggin.file.name两个属性来配置,但是根据官网的文档介绍,这两个属性,我们只需要配置一个即可,否则是不生效的。

如何指定日志格式?

在默认情况下的日志格式,在项目启动的时候,就看到了。那么我们如何能够定制一下属于我们自己的日志格式呢?可以通过如下的两个属性来设置

logging.pattern.console:设置控制台日志格式logging.pattern.file:设置日志文件中输出格式

logging:  pattern:    console: %d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n    file: %d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n

其中

yyyy/MM/dd-HH:mm:ss 表示日志输出的时间格式thread 表示进程名称5level 表示日志级别logger 日志输出者的名称msg 日志消息%n 换行符如何自定义日志配置呢?

在Spring Boot 官方文档中,给出了根据不同的日志组件来设置不同的日志配置。例如我们默认使用的是LogBack,那么我们需要在resource目录下创建一个logback.xml的日志配置文件,就可以进行自定义的日志配置了。如图所示。

当然官方文档中还给出了其他的日志系统对应的配置文件的写法。

Logback:logback-spring.xml, logback.xmlLog4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xmlLog4j2:log4j2-spring.xml, log4j2.xmlJDK(Java Util Logging): logging.properties

当然既然是官方推荐,那么就以Logback为主,这个时候,我们就可以在这个Logback.xml文件中开始编写自己的日志配置方式了,如下图所示。由于篇幅有限,这里就不粘贴具体的源码信息了。有兴趣的读者可以自己查阅相关资料进行配置。

总结

到这里Spring Boot日志操作相关内容就介绍完了,那么在最后我们介绍了关于如何自定义日志配置,可以通过logback.xml的方式进行配置,由于篇幅有限,没有做过多的介绍,想了解原理的读者,可以自己查阅相关资料,或者是可以留言大家一起讨论。

标签: #nginx日志配置详解