天天看點

自定義日志配置 | 帶你讀《SpringBoot實戰教程》之八

本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程《SpringBoot實戰教程》,主講人楊紅豔, 點選檢視視訊内容

自定義日志配置

通過系統屬性和傳統的Spring Boot外部配置檔案依然可以很好的支援日志控制和管理。

根據不同的日志系統,你可以按如下規則組織配置檔案名,就能被正确加載:

• Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy

• Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml

• Log4j2:log4j2-spring.xml, log4j2.xml

• JDK (Java Util Logging):logging.properties

Spring Boot官方推薦優先使用帶有-spring的檔案名作為你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名為logback-spring.xml的日志配置檔案,spring boot可以為它添加一些spring boot特有的配置項。

如果你即想完全掌控日志配置,但又不想用logback.xml作為Logback配置的名字,可以通過logging.config屬性指定自定義的名字:

logging.config=classpath:logging-config.xml

雖然一般并不需要改變配置檔案的名字,但是如果你想針對不同運作時Profile使用不同的日志配置,這個功能會很有用。

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration  scan="true" scanPeriod="60 seconds" debug="false">  
        <contextName>logback</contextName>  
        <property name="log.path" value="E:\\springboot\\info.log" />  
        <!--輸出到控制台-->  
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">  
           <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
                <level>ERROR</level>  
            </filter>-->  
            <encoder>  
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>  
            </encoder>  
        </appender>  
      
        <!--輸出到檔案-->  
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <file>${log.path}</file>  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>  
            </encoder>  
        </appender>  
      
        <root level="info">  
            <appender-ref ref="console" />  
            <appender-ref ref="file" />  
        </root>  
      
        <!-- logback為java中的包 -->  
        <logger name="com.qianfeng.controller"/>  
        
        <!--additivity是否向上級loger傳遞列印資訊-->  
        <logger name="com.qianfeng.controller.SpringController" level="WARN" additivity="false">  
            <appender-ref ref="console"/>  
        </logger>  
</configuration>  
           

根節點包含的屬性:

• scan:當此屬性設定為true時,配置檔案如果發生改變,将會被重新加載,預設值為true。

• scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間機關,預設機關是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。

• debug:當此屬性設定為true時,将列印出logback内部日志資訊,實時檢視logback運作狀态。預設值為false。

:每個logger都關聯到logger上下文,預設上下文名稱為“default”。但可以使用設定成其他名字,用于區分不同應用程式的記錄。一旦設定,不能修改,可以通過%contextName來列印日志上下文名稱。

:用來定義變量值的标簽, 有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。通過定義的值會被插入到logger上下文中。定義變量後,可以使“${}”來使用變量。

:用來格式化日志輸出節點,有倆個屬性name和class,class用來指定哪種輸出政策,常用就是控制台輸出政策和檔案輸出政策。

ThresholdFilter為系統定義的攔截器,例如我們用ThresholdFilter來過濾掉ERROR級别以下的日志不輸出到檔案中。如果不用記得注釋掉,不然你控制台會發現沒日志。

RollingFileAppender用于切分檔案日志:

logback.%d{yyyy-MM-dd}.log:定義了日志的切分方式——把每一天的日志歸檔到一個檔案中,

30:表示隻保留最近30天的日志,以防止日志填滿整個磁盤空間。同理,可以使用%d{yyyy-MM-dd_HH-mm}來定義精确到分的日志切分方式。

1GB用來指定日志檔案的上限大小,例如設定為1GB的話,那麼到了這個值,就會删除舊的日志。

節點是必選節點,用來指定最基礎的日志輸出級别,隻有一個level屬性。

用來設定某一個包或者具體的某一個類的日志列印級别、以及指定。僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。

name:用來指定受此loger限制的某一個包或者具體的某一個類。

level:用來設定列印級别,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級别。如果未設定此屬性,那麼目前loger将會繼承上級的級别。

• addtivity:是否向上級loger傳遞列印資訊。預設是true。