常用的日志类型有:Java Util Logging,commons logging,Log4j和slf4jspringboot三种日志输出均支持,如果使用spring-boot-starter依赖的(一般都使用这个),均默认使用的为logback,又默认依赖slf4j作为日志输出。
默认日志Logback
默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在新建的springboot项目或是开源项目运行时,就会看到日志输出:
这就是springboot默认的日志输出,查看源码可知,默认配置为org/springframework/boot/logging/logback/base.xml的日志配置:
//base.xml
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
// defaults.xml
<included>
# 定义显示颜色
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
# 定义默认控制台输出日志输出格式
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
# 定义默认日志文件输出格式
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR" />
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR" />
<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN" />
<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN" />
<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN" />
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR" />
<logger name="org.hibernate.validator.internal.util.Version" level="WARN" />
</included>
//console-appender.xml
<included>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
</included>
//file-appender.xml
<included>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
<maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory>
</rollingPolicy>
</appender>
</included>
上述的配置要点:
defaults.xml文件主要对一些变量做声明,并配置几个重要的类的日志输出,而base.xml则是通过root进行配置日志输出的方式有:控制台输出和日志文件输出,核心的一些配置在于日志输出格式(pattern),
在defaults.xml中定义了默认的控制台输出的格式和文件日志输出格式(上面代码标黄处),在自定义输出格式可以参考其配置:
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
其中clr表示显示颜色设置(使用org.springframework.boot.logging.logback.ColorConverter类),官方文档给出目前支持的颜色有blue,cyan,faint,green,magenta,red,yellow,可以针对异常的日志做特殊的颜色输出配置。
添加日志依赖
spring-boot-starter中都包含了logging依赖,因此我们只需要有spring-boot-starter的依赖即可(如Thymeleaf,redis等)。
日志文件自定义配置
在进行自定义日志配置前,需要先了解几个概念:
日志输出级别
SpringBoot支持6种日志级别(常用的只有四种),默认级别为INFO,比设置级别低的日志信息均不会输出,按优先级别排序如下:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
可以设置级别为DEBUG来启用调试模式(通常开发时使用),正常程序运行的每条日志都会输出。
日志输出方式
默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件
- 控制台输出,只在控制台(console)中打印出日志。
- 文件输出,将输出的日志保存到文件中。通常会自定义配置日志输出的文件的保存路径,文件命名格式,日志格式等(更多时还需要区分日志级别,每天产生一个日志文件等)。
如果要生成日志文件,需要在application.properties/yml文件中配置logging.file或logging.path等属性
logging.file 生成日志文件路径(可以相对路径或绝对路径)
logging.file.max-size 日志文件大小阈值,默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件
logging.path 生成日志文件目录
logging.pattern.console 配置控制台输出日志的格式
logging.pattern.dateformat 日期格式化
logging.pattern.file 文件格式
logging.pattern.level