通過藉助logback將系統日誌保存到日誌文件中。如果spring boot添加了spring-boot-starter-web依賴,該依賴包含了spring-boot-starter-logging,然後默認使用logback來記錄日誌。
在項目的resources下新建logback配置文件logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>cacacai</contextName>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
<property name="log.path" value="log" />
<property name="log.maxHistory" value="15" />
<property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %boldCyan([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]) %yellow(%thread) %green(%logger) %msg%n"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level [${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] %thread %logger %msg%n"/>
<!--輸出到控制檯-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.colorPattern}</pattern>
</encoder>
</appender>
<!--輸出到文件-->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>${log.maxHistory}</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<root level="debug">
<appender-ref ref="console" />
</root>
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
logback配置文件大致結構如下所示:
<configuration>
<property/>
<appender/>
<root/>
</configuration>
下面詳細介紹下這些標籤的作用,介紹完後,再回來看這個配置文件,你應該就能看懂它的含義了。
<configuration>
<configuration>
爲logback配置文件的根標籤,該標籤包含三個屬性:
scan
:當此屬性設置爲true時,配置文件如果發生改變,將會被重新加載,默認值爲true。scanPeriod
:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。debug
:當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。
<property>
用來定義變量值的標籤,有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。通過定義的值會被插入到logger上下文中。定義變量後,可以使${}
來使用變量。
`<springProperty scope="context" name="springAppName" source="spring.application.name"/>
這段配置用於引用Spring上下文的變量。通過這段配置,我們可以在logback配置文件中使用${springAppName}
來引用配置文件application.yml裏的spring.application.name配置值。
<property name="log.path" value="log/path" />
上面這段配置定義了log.path變量,用於指定日誌文件存儲路徑。
<property name="log.maxHistory" value="15" />
上面這段配置定義了log.maxHistory變量,用於指定日誌文件存儲的天數,這裏指定爲15天。
<property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %boldCyan([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]) %yellow(%thread) %green(%logger) %msg%n"/>
這段配置定義了彩色日誌打印的格式。在logback配置文件中,我們可以使用%magenta()
、%boldCyan()
等標識指定日誌的顏色;%d{yyyy-MM-dd HH:mm:ss}
用於格式化日誌打印時間;%highlight(%-5level)
配置了不同日誌級別使用不同的顏色高亮顯示;
%X{X-B3-TraceId:-}
,%X{X-B3-SpanId:-}
,%X{X-Span-Export:-}
用於打印Spring Cloud Sleuth提供的TraceId和SpanId等信息,這配置信息用來追蹤Zipkin Server請求鏈了。
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level [${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] %thread %logger %msg%n"/>
這段配置定義了普通日誌打印格式,大體上和上面彩色日誌配置差不多,卻別就是去掉了顏色配置。
如果項目沒有使用Spring Cloud Sleuth進行請求追蹤,那麼TraceId和SpanId打印出來都是空的,可以用下面這段配置來替代:
<property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %yellow(%thread) %green(%logger) %msg%n"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %logger %msg%n"/>
<appender>
appender
用來格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制檯輸出策略和文件輸出策略。
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.colorPattern}</pattern>
</encoder>
</appender>
上面這段配置用於指定日誌輸出到控制檯,日誌打印格式採用上面定義的彩色日誌打印(IDEA控制檯支持彩色日誌輸出),這樣在開發的時候,控制檯輸出的日誌會更爲美觀,易於分析問題。
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>${log.maxHistory}</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
這兩段配置用於指定日誌輸出到日誌文件。其中,名稱爲file_info的appender指定了INFO級別的日誌輸出到log/info目錄下,文件名稱爲info.日期.log,並且日誌格式爲普通格式,因爲文件一般不支持彩色顯示;名稱爲file_error的appender指定了ERROR級別的日誌輸出到log/error目錄下,文件名稱爲error.日期.log,日誌格式也爲普通格式。
<root>
root節點是必選節點,用來指定最基礎的日誌輸出級別,只有一個level屬性,用來設置打印級別。如果在appender裏制定了日誌打印的級別,那麼root指定的級別將會被覆蓋。
啓動項目之後
控制檯輸出
自動創建了目錄
文章參考來源https://www.kancloud.cn/mrbird/spring-cloud/1263714