??之前習(xí)慣了日志配置文件粘貼復(fù)制。今天閑下來的時候,學(xué)習(xí)了Logback的配置新姿勢,以后不再盲目粘貼復(fù)制了够滑。由于Springboot中默認(rèn)的日志配置是Logback,因此本文中也只涉及Logback的配置吕世。
1. 配置整體結(jié)構(gòu)
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>${maskwang-log}</contextName>
<appender>
//xxxx
</appender>
<logger>
//xxxx
</logger>
<root>
//xxxx
</root>
</configuration>
每個日志配置文件的配置都是上面這種形式彰触,基本的結(jié)果如下圖。其中scan
表示是否定期掃描更新配置文件命辖,scanPeriod
表示掃描的周期况毅,debug
設(shè)置為true時,將打印出logback內(nèi)部日志信息尔艇,實時查看logback運行狀態(tài)尔许,默認(rèn)值為false。
-
appender
表示日志輸出的位置终娃,通常有輸出到控制臺的ConsoleAppender
味廊,輸出到文體的FileAppender
和RollingFileAppender
。 -
logger
表示需要進(jìn)行自定義日志的位置棠耕,即在哪里打需要的日志余佛。通常像下面這樣自定義某個類需要的日志
<logger name="com.maskwang.controller" level="info"
additivity="false">
<appender-ref ref="infoAppender" />
</logger>
-
root
表示根logger,也是一種logger窍荧,且只有一個level屬性辉巡。沒有特別指定logger
,那么都是采用root
的日志配置蕊退。
日志.jpg
2. appender詳解
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
這種是指定控制臺打印的appender郊楣,其中CONSOLE_LOG_PATTERN
是自定義的日志打印格式,如[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n
所示瓤荔。
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路徑 净蚤,注意LOG_PATH是默認(rèn)值,
它的配置對應(yīng)application.properties里的logging.path值-->
<file>${LOG_PATH}/info/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名稱 -->
<fileNamePattern>info/info-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 文件最大保存歷史數(shù)量 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
這種是滾動文件文件的appender输硝,也就是每隔一天生成一個日志文件塞栅。
-
file
表示存放日志文件的目錄。 -
rollingPolicy
表示文件滾動的策略,fileNamePattern
表示每個滾動文件的命名如info-2019-11-19.log
放椰,MaxHistory
保存的最大文件個數(shù),該例子中表示最多只保存30天的日志愉粤,舊的日志將會刪除砾医。 -
pattern
表示日志文每條日志的格式如[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n
。 -
filter
表示過濾不想要級別的日志衣厘。LevelFilter
類表示過濾特定的級別如蚜,該例子中表示該appender只保存INFO
級別的日志,其他的日志則忽略影暴。其實還有另外一種類ThresholdFilter
错邦,表示只保存該級別或者該級別更高級別的日志。level
表示日志級別型宙,onMatch
表示如果匹配就記錄撬呢,并且不傳遞到下一個過濾器。onMismatch
表示不匹配記錄且不傳遞到下一個過濾器妆兑。如果需要自定義過濾規(guī)則魂拦,則需要繼承Filter
,實現(xiàn)decide
方法,具體如didi的這篇文章Logback中如何自定義靈活的日志過濾規(guī)則
3. root詳解
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="warnAppender"/>
</root>
- root中通常只有
level
一個屬性搁嗓,表示默認(rèn)的日志級別芯勘。然后包括多個appender-ref
來給不同級別的日志配置不同的appender。在沒有指定特殊的logger腺逛,所有按照root的格式輸出日志荷愕。
通過上面三部分,就可以自定義日志輸出棍矛。以下附一份完整的日志配置文件安疗,實現(xiàn)把info
,`warn’級別的日志分別輸出到不同的文件中茄靠,且生成滾動日志茂契。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- INFO -->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路徑 ,注意LOG_PATH是默認(rèn)值慨绳,
它的配置對應(yīng)application.properties里的logging.path值-->
<file>${LOG_PATH}/info/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名稱 -->
<fileNamePattern>info/info-%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- 文件最大保存歷史數(shù)量 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- WARN -->
<appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路徑 掉冶,注意LOG_PATH是默認(rèn)值,
它的配置對應(yīng)application.properties里的logging.path值-->
<file>${LOG_PATH}/warn/warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名稱 -->
<fileNamePattern>warn/warn-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 文件最大保存歷史數(shù)量 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="com.maskwang.controller" level="info"
additivity="false">
<appender-ref ref="infoAppender" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="warnAppender"/>
</root>
</configuration>