SpringBoot日志总结
一、日志系统
在开发中,我们经常使用 System.out.println()
来打印一些信息,但是这样不好,因为大量的使用 System.out
会增加资源的消耗,而且部署在Linux上时只能通过日志来查看输出。我们实际项目中使用的是 slf4j
的 logback
来输出日志,slf4j+logback
也是springboot的默认日志框架,当然logback
也可以换成性能更好的log4j2
框架。
1. slf4j 介绍
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
slf4j要求我们只需要按统一的方式写记录日志的代码,而无需关心日志是通过哪个日志系统,以什么风格输出的。因为它们取决于部署项目时绑定的日志系统。
首先需要添加依赖
1 | <!--<dependency>--> |
日志的使用
1 | import org.slf4j.Logger; |
还有一种方法通过注解方式,需要安装好Lombok插件
1 | import lombok.extern.slf4j.Slf4j; |
2. application.yml 中对日志的配置
application.yml
文件是 Spring Boot 中唯一一个需要配置的文件,一开始创建工程的时候是 application.properties
文件(*注:同一优先级位置同时有 application.properties
和 application.yml
,那么 application.yml
里的属性会覆盖 application.properties
里的属性)
这里我们对 application.yml
文件中对日志的配置:
1 | logging: |
logging.config
是用来指定项目启动的时候,读取哪个配置文件,这里指定的是日志配置文件是根路径下的 logback.xml
文件,关于日志的相关配置信息,都放在 logback.xml
文件中了。logging.level
是用来指定具体的 mapper 中日志的输出级别,上面的配置表示 com.test
包下的所有日志输出级别为 trace,会打印出所以debug以上信息。在生产环境上,将这个日志级别再设置成 error 级别即可。当然在 application.yml 中还可以显示定义其他例如logging.pattern.console
等配置信息。
常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。
对于classpath路径,src 路径下的文件 在编译后都会放到 WEB-INF/classes 路径下。默认classpath 就是指这里。用maven构建 项目时,resources 目录就是默认的classpath
3. logback.xml 配置文件解析
在上面 application.yml
文件中,我们指定了日志配置文件 logback.xml
,logback.xml
文件中主要用来做日志的相关配置。在 logback.xml
中,我们可以定义日志输出的格式、路径、控制台输出格式、文件大小、保存时长等等。下面来分析一下:
3.1 定义日志输出格式和存储路径
1 | <configuration> |
1 | 日志输出格式: |
对于“FILE_PATH” 文件路径,日志都会存储在该路径下。%i
表示第 i 个文件,当日志文件达到指定大小时,会将日志生成到新的文件里,这里的 i 就是文件索引,日志文件允许的大小可以设置。这里需要注意的是,不管是 windows 系统还是 Linux 系统,日志存储的路径必须要是绝对路径。
如果想在控制台换成彩色打印输出,可以在<configuration>
里添加如下配置
1 | <!-- 彩色日志配置 --> |
3.2 定义控制台输出
1 | <configuration> |
使用 <appender>
节点设置个控制台输出(class="ch.qos.logback.core.ConsoleAppender"
)的配置,定义为 “CONSOLE”。使用上面定义好的输出格式(LOG_PATTERN)来输出,使用 ${}
引用进来即可。
3.3 定义日志文件的相关参数
1 | <configuration> |
使用 <appender>
定义一个名为 “FILE” 的文件配置,主要是配置日志文件保存的时间、单个日志文件存储的大小、以及文件保存的路径和日志的输出格式。
3.4 定义日志输出级别
1 | <configuration> |
有了上面那些定义后,最后我们使用 <logger>
来定义一下项目中默认的日志输出级别,这里定义级别为 INFO,然后针对 INFO 级别的日志,使用 <root>
引用上面定义好的控制台日志输出和日志文件的参数。这样 logback.xml 文件中的配置就设置完了。
4.Springboot默认日志logback切换为log4j2
1、引入log4j2依赖,去除固有依赖
首先 ,引入log4j2的starter,将logback.xml改为log4j2的配置文件
1 | <dependency> |
然后需要排除spring自带的日志框架logback依赖,如果项目中只引入了web的starter,则可以在web starter中排除掉logging
1 | <dependency> |
如果项目中引入的不止web starter,此时我们需要在spring-boot-starter中排除logging的依赖
1 | <dependency> |
2、配置log4j2.xml
文件
若自定义文件名,则需要在application.yml
进行修改,配置文件也logback也有区别
1 | logging: |
1 |
|
3、控制台显示颜色
在Log4j 2.10以前的版本,pattern中配置%highlight属性是可以正常打印彩色日志的。
但是是更新到2.10版本以后,控制台中就无法显示彩色日志了,各种级别的日志混杂在一起,难以阅读。Log4j2默认关闭了Jansi(一个支持输出ANSI颜色的类库)。
操作
IDEA中,点击右上角->Edit Configurations,在VM options中添加-Dlog4j.skipJansi=false
二、自定义日志Appender
1、logback自定义Appender
自定义文件Appender
1 | public class MyAppender extends AppenderBase<ILoggingEvent> { |
其次添加logback.xml
配置
1 |
|
2、log4j2自定义Appender
自定义文件Appender,这里需要注意几个点
@Plugin..
注解:这个注解,是为了在之后配置log4j2.xml
时,指定的Appender Tag。- 构造函数:除了使用父类的以外,也可以增加一些自己的配置。
- 重写
append()
方法:这里面需要实现具体的逻辑,日志的去向。 createAppender()
方法:主要是接收log4j2.xml中的配置项。
1 | /** |
其次添加log4j2.xml
配置,需要注意一下几点
- 下面的log配置,一共配了2个输出。一个是终端输出,一个是采用自定义的MyAppender 输出,即
append()
方法输出 <MyAppender>
标签要与自定义Appender中的类注解保持一致。
1 |
|
参考:
https://blog.csdn.net/java821643/article/details/88753898
http://logback.qos.ch/manual/index.html
https://blog.csdn.net/weixin_39370859/article/details/105039787