1. 程式人生 > 其它 >logback配置檔案

logback配置檔案

logback 取代 log4j 的理由:Logback的核心重寫了,在一些關鍵執行路徑上效能提升10倍以上。而且logback不僅效能提升了,初始化記憶體載入也更小了。

  • log4j定義了8個級別的log(除去OFF和ALL,可以說分為6個級別),優先順序從高到低依次為:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

springboot整合 logback 的配置檔案:

<?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"/>

    <property name="LOG_HOME" value="D:\log"/>
    <property name="LOG_PREFIX" value="log-info"/>

    <springProperty scope="context" name="appName" source="spring.application.name"/>
    <!--
    %p:輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
    %r:輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數
    %t:輸出產生該日誌事件的執行緒名
    %f:輸出日誌訊息所屬的類別的類別名
    %c:輸出日誌訊息所屬的類的全名
    %d:輸出日誌時間點的日期或時間,指定格式的方式: %d{yyyy-MM-dd HH:mm:ss}
    %l:輸出日誌事件的發生位置,即輸出日誌訊息的語句在他所在類別的第幾行。
    %m:輸出程式碼中指定的訊息,如log(message)中的message
    %n:輸出一個換行符號
    -->
    <!--
    Appender: 設定日誌資訊的去向,常用的有以下幾個
    ch.qos.logback.core.ConsoleAppender (控制檯)
    ch.qos.logback.core.rolling.RollingFileAppender (檔案大小到達指定尺寸的時候產生一個新檔案)
    ch.qos.logback.core.FileAppender (檔案,不推薦使用)
    -->
    <appender name="FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--&lt;!&ndash; 被寫入的檔名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動建立 &ndash;&gt;-->
        <file>${LOG_HOME}/${LOG_PREFIX}-${appName}-%d{yyyy-MM-dd}.log</file>
        <!--RollingFileAppender:-->
        <!--滾動記錄檔案,先將日誌記錄到指定檔案,當符合某個條件時,將日誌記錄到其他檔案。-->
        <!--<rollingPolicy>:當發生滾動時,決定RollingFileAppender 的行為,涉及檔案移動和重新命名。-->
        <!--TimeBasedRollingPolicy: 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--<fileNamePattern>:
            必要節點,包含檔名及“%d”轉換符, “%d”可以包含一個 java.text.SimpleDateFormat指定的時間格式,如:%d{yyyy-MM}。
            如果直接使用 %d,預設格式是 yyyy-MM-dd。RollingFileAppender 的file位元組點可有可無,通過設定file,可以為活動檔案和歸檔檔案指定不同位置,當前日誌總是記錄到file指定的檔案(活動檔案),活動檔案的名字不會改變;
            如果沒設定file,活動檔案的名字會根據fileNamePattern的值,每隔一段時間改變一次。“/”或者“\”會被當做目錄分隔符。-->
            <!--<fileNamePattern>${LOG_HOME}/daily/${appName}-log.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>-->
            <!--壓縮檔案的儲存路徑以及儲存格式,這裡必須將檔案壓縮,.%i 必須有。如果按上面的配置會報錯-->
            <fileNamePattern>${LOG_HOME}/daily/${appName}-log.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--儲存檔案的大小,超過該大小自動建立新檔案。舊檔案壓縮儲存到daily目錄下-->
                <MaxFileSize>20MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
            <!--&lt;!&ndash; 可選節點,控制保留的歸檔檔案的最大數量,超出數量就刪除舊檔案。假設設定每個月滾動,如果是6,則只儲存最近6天的檔案,刪除之前的舊檔案 包括壓縮檔案 &ndash;&gt;-->
            <!--&lt;!&ndash; 每產生一個日誌檔案,該日誌檔案的儲存期限天數 &ndash;&gt;-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!--<encoder>:對記錄事件進行格式化。-->
        <encoder>
            <!--格式化輸出:%d表示日期,後面跟時間格式,預設%data{yyyy-MM-dd},%thread表示執行緒名, %msg:日誌訊息,%n是換行符-->
            <pattern>%d -%X{appId} -%X{requestId} -per %X{perRequestId} %X{userIP} %-4relative [%thread] %-5level
                %logger{35} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d -%X{appId} -%X{requestId} -per %X{perRequestId} %X{userIP} %-4relative [%thread] %-5level
                %logger{35} - %msg %n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <logger name="org.mybatis" level="debug"/>
    <logger name="org.apache.ibatis" level="debug"/>
    <springProfile name="local,dev">
        <!--root是預設的logger 這裡設定輸出級別是info-->
        <root level="INFO">
            <!--定義了兩個appender,日誌會通過往這兩個appender裡面寫-->
            <appender-ref ref="FILE"/>
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>
    <springProfile name="test,uat">
        <root level="INFO">
            <appender-ref ref="FILE"/>
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="FILE"/>
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>
</configuration>