更多Spring文章,歡迎點擊 一灰灰Blog-Spring專題html
SpringBoot默認選用logback進行日誌管理,前一篇講述了默認配置日誌的參數,然而這些內容比較初級,並不必定能知足咱們更加特殊的需求(好比輸出到多個不一樣的配置文件,不一樣的包路勁選擇不一樣的輸出方式等)java
因此本篇的內容,主要介紹logback.xml配置文件的語法,雖然與SpringBoot自己沒有太多的關聯性,但在SpringBoot項目中卻很是實用git
<!-- more -->github
也不針對語法進行逐一說明了,直接針對常見的xml配置文件進行分析,反正看完也會忘的,等到要用的時候,通常都是拷貝一個魔板,改更名啥的就over了spring
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- %m輸出的信息,%p日誌級別,%t線程名,%d日期,%c類的全名,%i索引【從數字0開始遞增】,,, --> <!-- appender是configuration的子節點,是負責寫日誌的組件。 --> <!-- ConsoleAppender:把日誌輸出到控制檯 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern> <!-- 控制檯也要使用UTF-8,不要使用GBK,不然會中文亂碼 --> <charset>UTF-8</charset> </encoder> </appender> <!-- RollingFileAppender:滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件 --> <!-- 如下的大概意思是:1.先按日期存日誌,日期變了,將前一天的日誌文件名重命名爲XXX%日期%索引,新的日誌仍然是demo.log --> <!-- 2.若是日期沒有發生變化,可是當前日誌的文件大小超過1KB時,對當前日誌進行分割 重命名--> <appender name="story" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--若是隻是想要 Error 級別的日誌,那麼須要過濾一下,默認是 info 級別的,ThresholdFilter--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <File>logs/story.log</File> <!-- rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名。 --> <!-- TimeBasedRollingPolicy: 最經常使用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 活動文件的名字會根據fileNamePattern的值,每隔一段時間改變一次 --> <!-- 文件名:log/demo.2018-06-23.0.log --> <fileNamePattern>logs/arch/story.%d.%i.log</fileNamePattern> <!-- 每產生一個日誌文件,該日誌文件的保存期限爲3天 --> <maxHistory>3</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- maxFileSize:這是活動文件的大小,默認值是10MB,測試時可改爲1KB看效果 --> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <!-- pattern節點,用來設置日誌的輸入格式 --> <pattern> %d %p (%file:%line\)- %m%n </pattern> <!-- 記錄日誌的編碼:此處設置字符集 - --> <charset>UTF-8</charset> </encoder> </appender> <!-- 指定項目中某個包,當有日誌操做行爲時的日誌記錄級別 --> <!-- 級別依次爲【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE --> <!-- additivity=false 表示匹配以後,再也不繼續傳遞給其餘的logger--> <logger name="com.git.hui" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT"/> <appender-ref ref="story"/> </logger> <logger name="com.github.hui" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT"/> <appender-ref ref="story"/> </logger> <!-- 控制檯輸出日誌級別 --> <root level="INFO"> <appender-ref ref="STDOUT"/> </root> </configuration>
從前面的配置文件中,appender這個標籤算是比較重要的,上面定義了兩類,一個控制檯輸出,一個文件輸出app
appender的class屬性來選擇框架
ch.qos.logback.core.ConsoleAppender
ch.qos.logback.core.rolling.RollingFileAppender
以實例 <pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern>
進行說明spring-boot
{% blockquote 官網翻譯@一灰灰Blog https://logback.qos.ch/manual/layouts.html%}學習
{% endblockquote %}測試
通常是天天歸檔一下日誌文件,避免全部的日誌都堆積到一個文件,當單文件特別大時,分析也不是一件容易的事情,常見的兩個設置參數
<!-- 日誌文件最多保存三天 --> <maxHistory>3</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- maxFileSize:這是活動文件的大小,默認值是10MB,測試時可改爲1KB看效果 --> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy>
另一個標籤就是logger了,name表示哪些包路徑下的日誌輸出會匹配這個(或者logger直接使用了這個name,也會匹配他)
另外兩個重要的屬性,level表示輸出日誌的級別,挺實用的,能夠根據實際場景設置某些日誌輸出,如框架層我只關係WARN級別日誌;我本身的業務可能就像關注INFO的日誌了
additivity 這個屬性,很容易不設置,若是不設置,那麼當一個日誌輸出,有多個logger匹配時,這個日誌就會被輸出屢次,建議設置爲false
根據前面配置的博文說明,logback.xml配置文件,推薦的用法是
logback-spring.xml
通常輸出日誌的用法,最多見的兩種方式
// 建立LOGGER對象 private static final Logger LOGGER = LoggerFactory.getLogger(SelfBeanLoader.class); // 輸出日誌的地方 LOGGER.info("info: {}", xxxx);
第二中就是使用lombok的 @Slf4j
註解
@Slf4j public class SelfBeanLoader { ... // 輸出日誌的地方 log.info("xxx"); }
推薦相關博文閱讀
一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛
盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
一灰灰blog
知識星球