logback 常用配置详解(二) appender
詳細(xì)整理了logback常用配置
不是官網(wǎng)手冊的翻譯版,而是使用總結(jié),旨在更快更透徹的理解其配置
logback 簡介
logback常用配置詳解(一)<configuration> and <logger>
logback 常用配置詳解(二)<appender>
logback 常用配置詳解(三)<filter>
logback 中文手冊(官網(wǎng)手冊的翻譯版,在這里向中文版譯者-陳華,說聲辛苦啦)
logback 常用配置詳解(二)<appender>
<appender>:
<appender>是<configuration>的子節(jié)點(diǎn),是負(fù)責(zé)寫日志的組件。
<appender>有兩個(gè)必要屬性name和class。name指定appender名稱,class指定appender的全限定名。
1.ConsoleAppender:
把日志添加到控制臺,有以下子節(jié)點(diǎn):
<encoder>:對日志進(jìn)行格式化。(具體參數(shù)稍后講解 )
<target>:字符串 System.out 或者 System.err ,默認(rèn) System.out ;
例如:
Xml代碼:
<configuration>
<appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<rootlevel="DEBUG">
<appender-refref="STDOUT"/>
</root>
</configuration>
2.FileAppender:
把日志添加到文件,有以下子節(jié)點(diǎn):
<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動(dòng)創(chuàng)建,沒有默認(rèn)值。
<append>:如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true。
<encoder>:對記錄事件進(jìn)行格式化。(具體參數(shù)稍后講解 )
<prudent>:如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認(rèn)是 false。
例如:
Xml代碼:
<configuration>
<appendername="FILE"class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<rootlevel="DEBUG">
<appender-refref="FILE"/>
</root>
</configuration>
3.RollingFileAppender:
滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件。有以下子節(jié)點(diǎn):
<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動(dòng)創(chuàng)建,沒有默認(rèn)值。
<append>:如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true。
<encoder>:對記錄事件進(jìn)行格式化。(具體參數(shù)稍后講解 )
<rollingPolicy>:當(dāng)發(fā)生滾動(dòng)時(shí),決定RollingFileAppender 的行為,涉及文件移動(dòng)和重命名。
<triggeringPolicy>:告知RollingFileAppender合適激活滾動(dòng)。
<prudent>:當(dāng)為true時(shí),不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個(gè)限制,1不支持也不允許文件壓縮,2不能設(shè)置file屬性,必須留空。
rollingPolicy:
TimeBasedRollingPolicy: 最常用的滾動(dòng)策略,它根據(jù)時(shí)間來制定滾動(dòng)策略,既負(fù)責(zé)滾動(dòng)也負(fù)責(zé)出發(fā)滾動(dòng)。有以下子節(jié)點(diǎn):
<fileNamePattern>:
必要節(jié)點(diǎn),包含文件名及“%d”轉(zhuǎn)換符,“%d”可以包含一個(gè)java.text.SimpleDateFormat指定的時(shí)間格式,如:%d{yyyy-MM}。如果直接使用 %d,默認(rèn)格式是 yyyy-MM-dd。RollingFileAppender 的file字節(jié)點(diǎn)可有可無,通過設(shè)置file,可以為活動(dòng)文件和歸檔文件指定不同位置,當(dāng)前日志總是記錄到file指定的文件(活動(dòng)文件),活動(dòng)文件的名字不會改變;如果沒設(shè)置file,活動(dòng)文件的名字會根據(jù)fileNamePattern的值,每隔一段時(shí)間改變一次。“/”或者“\”會被當(dāng)做目錄分隔符。
<maxHistory>:
可選節(jié)點(diǎn),控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件。假設(shè)設(shè)置每個(gè)月滾動(dòng),且 <maxHistory>是6,則只保存最近6個(gè)月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創(chuàng)建的目錄也會被刪除。
FixedWindowRollingPolicy: 根據(jù)固定窗口算法重命名文件的滾動(dòng)策略。有以下子節(jié)點(diǎn):
<minIndex>:窗口索引最小值
<maxIndex>:窗口索引最大值,當(dāng)用戶指定的窗口過大時(shí),會自動(dòng)將窗口設(shè)置為12。
<fileNamePattern >:
必須包含“%i”例如,假設(shè)最小值和最大值分別為1和2,命名模式為 mylog%i.log,會產(chǎn)生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項(xiàng),例如,mylog%i.log.gz 或者 沒有l(wèi)og%i.log.zip
triggeringPolicy:
SizeBasedTriggeringPolicy: 查看當(dāng)前活動(dòng)文件的大小,如果超過指定大小會告知 RollingFileAppender 觸發(fā)當(dāng)前活動(dòng)文件滾動(dòng)。只有一個(gè)節(jié)點(diǎn):
<maxFileSize>:這是活動(dòng)文件的大小,默認(rèn)值是10MB。
例如:每天生成一個(gè)日志文件,保存30天的日志文件。
Java代碼:
<configuration> ? ?
?<appender name="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"> ? ?
? ?<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> ? ?
? ? ?<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> ? ?
? ? ?<maxHistory>30</maxHistory> ? ?
? ?</rollingPolicy> ? ?
? ?<encoder> ? ?
? ? ?<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> ? ?
? ?</encoder> ? ?
?</appender> ? ?
?<root level="DEBUG"> ? ?
? ?<appender-ref ref="FILE" /> ? ?
?</root> ? ?
</configuration> ?
?例如:按照固定窗口模式生成日志文件,當(dāng)文件大于20MB時(shí),生成新的日志文件。窗口大小是1到3,當(dāng)保存了3個(gè)歸檔文件后,將覆蓋最早的日志。
Xml代碼:
<configuration>
<appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicyclass="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<rootlevel="DEBUG">
<appender-refref="FILE"/>
</root>
</configuration>
4.另外還有SocketAppender、SMTPAppender、DBAppender、SyslogAppender、SiftingAppender,并不常用,這些就不在這里講解了,大家可以參考官方文檔。當(dāng)然大家可以編寫自己的Appender。
<encoder>:
負(fù)責(zé)兩件事,一是把日志信息轉(zhuǎn)換成字節(jié)數(shù)組,二是把字節(jié)數(shù)組寫入到輸出流。
目前PatternLayoutEncoder 是唯一有用的且默認(rèn)的encoder ,有一個(gè)<pattern>節(jié)點(diǎn),用來設(shè)置日志的輸入格式。使用“%”加“轉(zhuǎn)換符”方式,如果要輸出“%”,則必須用“\”對“\%”進(jìn)行轉(zhuǎn)義。
例如:
Xml代碼:
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder
<pattern>里面的轉(zhuǎn)換符說明:
轉(zhuǎn)換符 作用
| c {length } lo {length } logger {length } | 輸出日志的logger名,可有一個(gè)×××參數(shù),功能是縮短logger名,設(shè)置為0表示只輸入logger最右邊點(diǎn)符號之后的字符串。 ? Conversion specifier Logger name Result
| ||||||||||||||||||||||||
| C {length } class {length } | 輸出執(zhí)行記錄請求的調(diào)用者的全限定名。參數(shù)與上面的一樣。盡量避免使用,除非執(zhí)行速度不造成任何問題。 | ||||||||||||||||||||||||
| contextName cn | 輸出上下文名稱。 | ||||||||||||||||||||||||
| d {pattern } date {pattern } | 輸出日志的打印日志,模式語法與java.text.SimpleDateFormat 兼容。 ? Conversion Pattern Result
| ||||||||||||||||||||||||
| F / file | 輸出執(zhí)行記錄請求的java源文件名。盡量避免使用,除非執(zhí)行速度不造成任何問題。 | ||||||||||||||||||||||||
| caller{depth}caller{depth, evaluator-1, ... evaluator-n} | 輸出生成日志的調(diào)用者的位置信息,整數(shù)選項(xiàng)表示輸出信息深度。 例如, %caller{2} ? 輸出為: 0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)例如, %caller{3} ? 輸出為: 16 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17) Caller+2 at mainPackage.ConfigTester.main(ConfigTester.java:38) | ||||||||||||||||||||||||
| L / line | 輸出執(zhí)行日志請求的行號。盡量避免使用,除非執(zhí)行速度不造成任何問題。 | ||||||||||||||||||||||||
| m / msg / message | 輸出應(yīng)用程序提供的信息。 | ||||||||||||||||||||||||
| M / method | 輸出執(zhí)行日志請求的方法名。盡量避免使用,除非執(zhí)行速度不造成任何問題。 | ||||||||||||||||||||||||
| n | 輸出平臺先關(guān)的分行符“\n”或者“\r\n”。 | ||||||||||||||||||||||||
| p / le / level | 輸出日志級別。 | ||||||||||||||||||||||||
| r / relative | 輸出從程序啟動(dòng)到創(chuàng)建日志記錄的時(shí)間,單位是毫秒 | ||||||||||||||||||||||||
| t / thread | 輸出產(chǎn)生日志的線程名。 | ||||||||||||||||||||||||
| replace(p ){r, t} | p 為日志內(nèi)容,r 是正則表達(dá)式,將p 中符合r 的內(nèi)容替換為t 。 例如, "%replace(%msg){'\s', ''}" |
格式修飾符,與轉(zhuǎn)換符共同使用:
可選的格式修飾符位于“%”和轉(zhuǎn)換符之間。
第一個(gè)可選修飾符是左對齊 標(biāo)志,符號是減號“-”;接著是可選的最小寬度 修飾符,用十進(jìn)制數(shù)表示。如果字符小于最小寬度,則左填充或右填充,默認(rèn)是左填充(即右對齊),填充符為空格。如果字符大于最小寬度,字符永遠(yuǎn)不會被截?cái)唷?strong>最大寬度 修飾符,符號是點(diǎn)號"."后面加十進(jìn)制數(shù)。如果字符大于最大寬度,則從前面截?cái)?。點(diǎn)符號“.”后面加減號“-”在加數(shù)字,表示從尾部截?cái)唷?/p>
例如:%-4relative 表示,將輸出從程序啟動(dòng)到創(chuàng)建日志記錄的時(shí)間 進(jìn)行左對齊 且最小寬度為4。
**下一篇將講解過濾器 ? filter**
轉(zhuǎn)載于:https://blog.51cto.com/aubdiy/815736
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的logback 常用配置详解(二) appender的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac上使用OpenCV【Xcode】
- 下一篇: Shell编程入门(第二版)(上)