前言
Spring Boot 底層默認(rèn)使用 slf4j 和 logback 的方式記錄日志。工程中依賴了 spring-boot-starter-web,它又依賴了 spring-boot-starter-logging,所以不需要再手動(dòng)添加該依賴。在 Spring Boot 中,application.yml 支持部分 logback 的日志配置,但一些高級(jí)配置只能通過獨(dú)立的 xml 配置文件實(shí)現(xiàn),經(jīng)過 Spring Boot 的整合后,可支持多環(huán)境配置,但 logback 配置文件需要命名為 logback-spring.xml。如果使用了自定義日志配置文件,application.yml中 logging 有關(guān)配置就會(huì)失效。
springboot 默認(rèn)的 logback 配置
SpringBoot 默認(rèn)提供了一套 logback 的配置文件,位于 spring-boot依賴中的 org/springframework/boot/logging/logback/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>
該文件引入了三個(gè) xml 文件,并設(shè)置了root的日志級(jí)別為 info。console-appender.xml 和 file-appender.xml 中定義了日志的追加器,分別是名為 CONSOLE 的控制臺(tái)追加器 和 名為 FILE 的文件追加器。org/springframework/boot/logging/logback/defaults.xml 定義了 logback 的轉(zhuǎn)換器、一些包的日志級(jí)別、日志顯示格式。
<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{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{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">
<destinationLogger>org.springframework.boot</destinationLogger>
</appender>
<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.crsh.plugin" level="WARN"/>
<logger name="org.crsh.ssh" level="WARN"/>
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="WARN"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" additivity="false">
<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
</logger>
<logger name="org.thymeleaf" additivity="false">
<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
</logger>
</included>
默認(rèn)在控制臺(tái)中顯示彩色日志,就是因?yàn)槭褂昧宿D(zhuǎn)換器 ColorConverter,顯示的格式為 CONSOLE_LOG_PATTERN 中使用了該轉(zhuǎn)換器。在我們的自定義配置中可以復(fù)用這個(gè) default.xml 和 console-appender.xml。
自定義配置
在 src/main/resources/下創(chuàng)建配置文件 logback-spring.xml。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
? ? <include resource="org/springframework/boot/logging/logback/defaults.xml" />
? ? <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
? ? <root level="INFO">
? ? ? ? <appender-ref ref="CONSOLE" />
? ? </root>
</configuration>
上面的配置引入了 spring boot 中 logback 的默認(rèn)配置和 CONSOLE 追加器,并定義了 root 的日志級(jí)別為 info。
日志級(jí)別
日志有五個(gè)級(jí)別:trace、debug、info、warn、error,級(jí)別依次較高,配置了某個(gè)級(jí)別,就會(huì)輸出該級(jí)別及其以上的級(jí)別。如,配置日志級(jí)別為 warn,則日志會(huì)輸出 warn、error;如果配置日志級(jí)別為 debug,則會(huì)輸出 debug、info、warn、error。
@RequestMapping(value = "/testLogLevel", method = RequestMethod.GET)
public String testLogLevel() {
LOGGER.trace("hello,愛琴孩!");
LOGGER.debug("hello,愛琴孩!");
LOGGER.info("hello,愛琴孩!");
LOGGER.warn("hello,愛琴孩!");
LOGGER.error("hello,愛琴孩!");
return "Success";
}
注意,引入的 Logger 和 LoggerFactory 兩個(gè)類都是 slf4j 包下面的。上面的代碼分別輸出五個(gè)級(jí)別的日志。啟動(dòng)服務(wù),訪問 testLogLevel接口,控制臺(tái)輸出:
?控制臺(tái)值輸出 info、warn、error,可以看出 SpringBoot 默認(rèn)輸出級(jí)別為 info??赏ㄟ^配置細(xì)粒度調(diào)整日志的級(jí)別:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
? ? ...
<logger name="com.example.study.controller" level="trace" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
? ?? ?...
</configuration>
上面按照包名更改了日志的顯示級(jí)別,com.example.study.controller 包下面的日志都是 trace 級(jí)別。上面配置選項(xiàng)"additivity",用于控制日志消息在日志層級(jí)之間的傳播方式。在Logback中,每個(gè)日志記錄器(logger)都有一個(gè)與之關(guān)聯(lián)的層級(jí)(level)。當(dāng)日志消息到達(dá)一個(gè)日志記錄器時(shí),Logback會(huì)將其傳播到所有具有相同或更高層級(jí)的日志記錄器。默認(rèn)情況下,Logback將日志消息傳播到所有父級(jí)日志記錄器。"additivity"的值可以是true或false。當(dāng)"additivity"設(shè)置為true時(shí),日志消息將被傳播到所有父級(jí)日志記錄器;當(dāng)"additivity"設(shè)置為false時(shí),日志消息將僅停留在當(dāng)前日志記錄器中,不會(huì)傳播到父級(jí)日志記錄器。通過配置"additivity",可以更細(xì)粒度地控制日志消息在應(yīng)用程序中的流動(dòng),避免在特定的日志記錄器中重復(fù)記錄日志消息,也可以提高日志記錄的性能。
重新訪問 testLogLevel接口,error、warn、info、debug、trace 都會(huì)全部打印出來。
文件追加器
上面復(fù)用了 SpringBoot 自帶的控制臺(tái)追加器 CONSOLE,這里自定義文件追加器:
<appender name="ServiceLogRollingFileAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log
</fileNamePattern>
</rollingPolicy>
</appender>
并在 root 中添加這個(gè)自定義 ServiceLogRollingFileAppender追加器:
<root level="INFO">
? ? <appender-ref ref="CONSOLE" />
? ? <appender-ref ref="ServiceLogRollingFileAppender" />
</root>
?多環(huán)境日志
假設(shè)希望在 local 時(shí),只輸出控制臺(tái)日志;在其他環(huán)境(dev、test等)輸出控制臺(tái)日志和文件日志。SpringBoot 提供了 springProfile 標(biāo)簽,通過該元素 name 屬性指定環(huán)境。修改 root 元素:
<root level="INFO">
? ? <springProfile name="local">
? ? ? ? <appender-ref ref="CONSOLE" />
? ? </springProfile>
? ? <springProfile name="!local">
? ? ? ? <appender-ref ref="CONSOLE" />
? ? ? ? <appender-ref ref="ServiceLogRollingFileAppender" />
? ? </springProfile>
</root>
分別使用 local 和 dev 啟動(dòng)服務(wù),測試多環(huán)境是否生效。我們自定義的 logback-spring.xml 充分利用了 Spring Boot 官方提供的配置,最終完整配置如下:文章來源:http://www.zghlxwxcb.cn/news/detail-727586.html
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<springProperty scop="context" name="LOG_SERVICE_NAME" source="logging.service.name" />
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_SERVICE_NAME}){faint} %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(%-40.40class{39} %5.5L){cyan}%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_SERVICE_NAME:-%5p} ${PID:- } [%t] ${LOG_LEVEL_PATTERN:-%5p} %-40.40class{39} %5.5L: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<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" />
<appender name="ServiceLogRollingFileAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log
</fileNamePattern>
</rollingPolicy>
</appender>
<root level="INFO">
<springProfile name="local">
<appender-ref ref="CONSOLE" />
</springProfile>
<springProfile name="!local">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ServiceLogRollingFileAppender" />
</springProfile>
</root>
<logger name="com.example.study.controller" level="trace" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>
?文章來源地址http://www.zghlxwxcb.cn/news/detail-727586.html
到了這里,關(guān)于Spring boot日志配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!