- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 詳解Springboot之Logback的使用學(xué)習
普通項目
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.11</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.11</version> </dependency>
springboot項目
<!--該依賴(lài)已經(jīng)集成了logback--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Logback默認會(huì )到類(lèi)路徑下找logback-test.xml and logback.xml
Spring Boot 會(huì )在 classpath 下查找是否有 logback-test.groovy、logback-test.xml、logback.groovy 或者 logback.xml,如果都找不到的話(huà),才會(huì )加載項目路徑下的 logback-spring.xml
logger: 日志記錄器,root是特殊的logger-頂層logger,因為logger具有繼承關(guān)系,稍后介紹
appender: 配置日志文件輸出目的地
encoder: 控制日志輸出格式,它是借助于layout實(shí)現的
rollingPolicy: RollingFileAppender具有該子元素,指定發(fā)生滾動(dòng)時(shí)的行為
triggeringPolicy: RollingFileAppender具有該子元素,指定何時(shí)發(fā)生滾動(dòng)過(guò)程,一般不用配置該元素,因為最受歡迎的TimeBasedRollingPolicy ,它實(shí)現了rolling policy同時(shí)也實(shí)現了triggering policy。
filter: 對appender收到的日志進(jìn)行過(guò)濾,只有滿(mǎn)足Filter條件的日志才輸出到日志文件
logger組件具有父子層級關(guān)系,root是最頂層的logger。logger記錄器是命名實(shí)體。它們的名稱(chēng)區分大小寫(xiě),并且遵循分層命名規則.
如果一個(gè)記錄器的名稱(chēng)后跟一個(gè)點(diǎn),則該記錄器是另一個(gè)記錄器的祖先,該后跟點(diǎn)的名稱(chēng)是其后代記錄器名稱(chēng)的前綴。如果記錄器與子記錄器之間沒(méi)有祖先,則稱(chēng)該記錄器為子記錄器的父項。 例如,名為"com.foo"的記錄器是名為"com.foo.Bar"的記錄器的父項。同樣, "java"是"java.util"和"java.util.Vector"的祖先記錄器。大多數開(kāi)發(fā)人員都應該熟悉這種命名方案。
logger日志級別繼承
如果未為給定的記錄器分配一個(gè)級別,則它將從其最接近的祖先那里繼承一個(gè)已分配的級別。例如: 給定記錄器L的有效級別等于其層次結構中的第一個(gè)非空級別,從L本身開(kāi)始, 然后在層次結構中向上尋找直到root logger。為了確保所有記錄器最終都可以繼承級別,root logger始終具有分配的級別,root logger默認級別是DEBUG。
注意:如果日志記錄請求的級別高于或等于記錄器的有效級別,則該日志請求是有效的。日志級別按以下順序排序: TRACE < DEBUG < INFO < WARN < ERROR。
logger關(guān)聯(lián)的appender繼承
一個(gè)logger可以配置多個(gè)appender,logger輸出的日志會(huì )輸出到當前記錄器綁定的appender和父級們logger(直到root logger)綁定的appender,可以設置additivity 屬性為false,則logger輸出的日志僅會(huì )輸出到當前記錄器綁定的appender
如果additivity為true,會(huì )存在重復輸出日志情況,如下所示
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="chapters.configuration"> <appender-ref ref="STDOUT" /> </logger> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>
那么chapters.configuration包下的日志會(huì )輸出兩遍到console控制臺,如下所示
14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.
14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.
配置日志輸出的目的地,常用的有ConsoleAppender、FileAppender 、RollingFileAppender
ConsoleAppender
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--默認System.out,也可以指定System.error --> <target>System.out</target> <!-- encoders 默認類(lèi)型ch.qos.logback.classic.encoder.PatternLayoutEncoder --> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> </encoder> </appender>
寫(xiě)日志到標準輸出流,可以配置target屬性為system.out,也可以指定System.error,默認System.out
FileAppender
包含的子元素有
RollingFileAppender
擴展了FileAppender,具有滾動(dòng)更新日志文件的功能;例如,RollingFileAppender可以登錄到一個(gè)名為log.txt的文件,一旦滿(mǎn)足某個(gè)條件,就可以保存當前日志文件,并滾動(dòng)輸出到新的日志文件。
包含的子元素有
rollingPolicy
rollingPolicy常用的有TimeBasedRollingPolicy、SizeAndTimeBasedRollingPolicy
TimeBasedRollingPolicy
TimeBasedRollingPolicy是最受歡迎的滾動(dòng)策略。它基于時(shí)間進(jìn)行滾動(dòng),可以是按月或按天等。TimeBasedRollingPolicy承擔滾動(dòng)以及觸發(fā)所述滾動(dòng)的責任。它實(shí)現了rolling policy同時(shí)也實(shí)現了triggering policy。
包含的子元素有
SizeAndTimeBasedRollingPolicy
支持按照時(shí)間拆分后,再按文件大小拆分
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>mylog.txt</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> <maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender>
"%i"表示當日志文件達到“maxFileSize”它將按照遞增序列(以0開(kāi)始)歸檔日志。
triggering policy
SizeBasedTriggeringPolicy
該triggering policy通過(guò)配置一個(gè)maxFileSize參數,當日志文件超過(guò)該閾值,會(huì )通知RollingFileAppender 觸發(fā)日志翻滾。但一般triggering policy可以不用配置,TimeBasedRollingPolicy 已經(jīng)完美集成了。
補充:以上Appender都是本地記錄日志,logback也支持網(wǎng)絡(luò )輸出日志、本地數據、郵件等;后續如果有需要再來(lái)研究。logback還可以使用AsyncAppender異步記錄日志。
Encoder
encoder負責轉換事件為字節數組并將字節數組寫(xiě)入輸出流中。PatternLayoutEncoder 是最常用的encoder,該類(lèi)通過(guò)使用PatternLayout來(lái)格式化日志事件。我們可以直接配置PatternLayoutEncoder ,而不用配置PatternLayout,它默認使用PatternLayout進(jìn)行格式輸出。
layout
負責轉換事件成字符串,我們可以自定義layout,然后通過(guò)encoder引用
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="chapters.layouts.MySampleLayout" /> </encoder>
PatternLayout
它將日志事件轉換成字符串,但是可以自定義字符串通過(guò)調整PatternLayout的轉換模式。
PatternLayout的轉換模式跟C語(yǔ)言的printf()函數緊密相關(guān)。
常用的模式有:
% d{pattern}: 日期
% level 日志級別
%thread 線(xiàn)程名稱(chēng)
%class 全限定類(lèi)名,日志請求記錄所在的類(lèi)
%method 日志請求記錄所在的方法
%line 日志請求記錄的行號
%n 換行
%logger{length} 輸出日志logger記錄器的名字,length指定輸出名字長(cháng)度,logback會(huì )智能縮寫(xiě)而不丟失語(yǔ)義。
%msg 輸出日志記錄器記錄的消息
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線(xiàn)程名,%-5level:級別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS,CTT} %-5level [%thread] [%class:%line] %logger{50} - %msg%n</pattern> </encoder>
多個(gè)模式之間分隔符,在大多數情況下,文字需包含空格或其他分隔字符('[',']','-'),這樣就不會(huì )與轉換詞混淆
Filter
對appender收到的日志調用decide方法進(jìn)行過(guò)濾,只有滿(mǎn)足Filter條件的日志才輸出到日志文件,decide方法有三個(gè)返回值,DENY、ACCEPT、NEUTRAL
LevelFilter
該過(guò)濾器對日志的級別過(guò)濾,如果事件日志級別等于配置的級別,過(guò)濾器接受或者拒絕該事件日志,依賴(lài)于onMatch 和 onMismatch屬性
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern> %-4relative [%thread] %-5level %logger{30} - %msg%n </pattern> </encoder> </appender>
ThresholdFilter
過(guò)濾低于指定閾值的事件。對于等于或高于閾值的事件,將在調用其()方法時(shí)響應NEUTRAL 。但是,級別低于閾值的事件將被拒絕。
<!-- deny all events with a level below INFO, that is TRACE and DEBUG --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter>
EvaluatorFilter
EvaluatorFilter 是封裝了的通用過(guò)濾器 EventEvaluator。顧名思義, 評估對象是否滿(mǎn)足給定事件的給定條件。在匹配和不匹配時(shí),托管將分別返回由onMatch 或onMismatch屬性指定的值。
GEventEvaluator 實(shí)現了EventEvaluator,通過(guò)子元素采用任意Groovy語(yǔ)言布爾表達式作為評估標準的具體實(shí)現
JaninoEventEvaluator實(shí)現了EventEvaluator,通過(guò)子元素采用任意Java語(yǔ)言塊返回布爾值作為評估標準。
uatorFilter
EvaluatorFilter 是封裝了的通用過(guò)濾器 EventEvaluator。顧名思義, 評估對象是否滿(mǎn)足給定事件的給定條件。在匹配和不匹配時(shí),托管將分別返回由onMatch 或onMismatch屬性指定的值。
GEventEvaluator 實(shí)現了EventEvaluator,通過(guò)子元素采用任意Groovy語(yǔ)言布爾表達式作為評估標準的具體實(shí)現
JaninoEventEvaluator實(shí)現了EventEvaluator,通過(guò)子元素采用任意Java語(yǔ)言塊返回布爾值作為評估標準。
EvaluatorFilter 也可通過(guò)子元素支持正則匹配。
到此這篇關(guān)于詳解Springboot之Logback的使用學(xué)習的文章就介紹到這了,更多相關(guān)Logback詳解內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站