常用的日誌類型有: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的日誌配置:
// 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,該依賴內容就是SpringBoot默認的日誌框架LogBack,但是我們新建一個項目時並未添加該依賴照樣有日誌?那是因爲在大部分的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