1. 程式人生 > >logback 日誌配置

logback 日誌配置

1,pom中加入依賴

springboot 已預設加入,無需新增

<dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.2.3</version>
</dependency>

2,配置案例

<?xml version="1.0" encoding="UTF-8"?>
<!--debug	預設false	要不要列印logback內部日誌資訊,true則表示要列印。建議開啟-->
<!--scan	預設true	配置傳送改變時,要不要重新載入-->
<!--scanPeriod	預設1 seconds	檢測配置發生變化的時間間隔。如果沒給出時間單位,預設時間單位是毫秒-->
<configuration debug="true" scan="true" scanPeriod="1 seconds">
    
    <!--定義application.properties的引數,後面可以通過${logLevel}根據環境設定日誌級別-->
    <springProperty scope="context" name="logLevel" source="log.level"/>
    <!--ConsoleAppender 用於在螢幕上輸出日誌-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定義了一個過濾器,在LEVEL之下的日誌輸出不會被打印出來-->
        <!--這裡定義了DEBUG,也就是控制檯不會輸出比ERROR級別小的日誌-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <!-- encoder 預設配置為PatternLayoutEncoder -->
        <!--定義控制檯輸出格式-->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!--向檔案輸出日誌內容的元件,同時可以配置日誌檔案滾動策略,在日誌達到一定條件後生成一個新的日誌檔案-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- <Encoding>UTF-8</Encoding> -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>./logs/express-consumer/express-consumer_%d{yyyy-M-d}.log
            </FileNamePattern>
           <!-- 日誌檔案保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n</pattern>
            <!-- 記錄日誌的編碼:此處設定字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--root是預設的logger trace、debug、info、warn、error-->
    <root level="info">
        <!--定義了兩個appender,日誌會通過往這兩個appender裡面寫-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>

    <!--對於類路徑以 com.example.logback 開頭的Logger,輸出級別設定為warn,並且只輸出到控制檯-->
    <!--這個logger沒有指定appender,它會繼承root節點中定義的那些appender-->
    <logger name="com.example.logback" level="warn"/>

    <!--通過 LoggerFactory.getLogger("mytest") 可以獲取到這個logger-->
    <!--由於這個logger自動繼承了root的appender,root中已經有stdout的appender了,自己這邊又引入了stdout的appender-->
    <!--如果沒有設定 additivity="false" ,就會導致一條日誌在控制檯輸出兩次的情況-->
    <!--additivity表示要不要使用rootLogger配置的appender進行輸出-->
    <logger name="mytest" level="info" additivity="false">
        <appender-ref ref="stdout"/>
    </logger>

    <!--由於設定了 additivity="false" ,所以輸出時不會使用rootLogger的appender-->
    <!--但是這個logger本身又沒有配置appender,所以使用這個logger輸出日誌的話就不會輸出到任何地方-->
    <logger name="mytest2" level="info" additivity="false"/>
</configuration>

不同環境使用不同的級別

<!--application-uat.yml-->
log.level=ERROR
<!--application.yml-->
log.level=DEBUG
<!--application-pro.yml-->
log.level=ERROR