spring boot logback日誌打印 詳解

通過藉助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配置文件的根標籤,該標籤包含三個屬性:

  1. scan:當此屬性設置爲true時,配置文件如果發生改變,將會被重新加載,默認值爲true。
  2. scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。
  3. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章