大數據

自定義日誌配置 | 帶你讀《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。

Leave a Reply

Your email address will not be published. Required fields are marked *