1. 程式人生 > >SpringBoot番外篇之logback日誌使用注意事項

SpringBoot番外篇之logback日誌使用注意事項

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>