本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程《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。