logback 日誌配置
阿新 • • 發佈:2019-01-11
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