SpringBoot番外篇之logback日誌使用注意事項
阿新 • • 發佈:2019-01-12
springboot預設的日誌配置:logback
根節點:
<configuration />
主要子節點:
<appender />:配置日誌輸出的方式,控制檯,檔案等。
<logger />、<root />:作用相同,細節配置不同,logger會覆蓋root的日誌輸出,root是全域性配置。
注意事項:
<logger />的additivity屬性預設為true(代表日誌繼承關係),會查詢上一級logger(實際按照包名查詢上層logger),找到後不再判斷logger的級別要求,直接找到對應的appender配置,將當前日誌級別中的日誌內容輸出到其中。
上一級logger指的是父級包,日誌會根據additivity的取值決定是否將日誌輸出到上層logger中。
配置兩個logger節點:
<appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender"> ... </appender> <appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender"> ... </appender> <logger name="org.test.log" level="INFO" additivty="true"><!-- 1 --> <appender-ref ref="FILE1"/> </logger> <logger name="org.test.log.controller" level="ERROR" additivty="true"><!-- 2 --> <appender-ref ref="FILE2"/> </logger <!-- 當 1是ERROR,2是INFO時,1的日誌檔案中會存在2中所輸出的info及以上級別的日誌資訊-->
當additivity=true時,父級包=info,子級包=error。info及以上級別的日誌都會輸入到父級日誌中,在子級程式碼中有日誌操作且只會將error資訊輸出到子級日誌中。(FILE1有所有日誌,FILE2只有error日誌)
當additivity=false時,父級日誌不會寫入子級程式碼中的任何級別日誌資訊。(FILE1沒有controller操作的任何級別日誌,FILE2只有error日誌)
一般當我們特意要將error日誌單獨輸出時,只要在appender配置中配置filter過濾就可以。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter>