最实用的logback讲解(2)—appender
文章目錄
- 2.1 RollingFileAppender
- 2.1. 1 SizeAndTimeBasedRollingPolicy根據時間和文件大小的滾動策略
- 2.1.2 TimeBasedRollingPolicy根據時間的滾動策略
- 2.1.3 FixedWindowRollingPolicy固定窗口的滾動策略
- 2.1.4 triggeringPolicy觸發策略
- 2.1.5 filter
- 2.2 ConsoleAppender
- 2.3 FileAppender
? ? ? ?上一節最實用的logback講解(1)介紹了configuration和logger的含義,今天介紹另一個重要的屬性appender,它是configuration的子節點,是控制輸出日志格式和地方的。官網文檔地址
? ? ? ?appender有兩個必要屬性name和class,name指定appender名稱,class指定appender的全限定名。另一個屬性encoder:負責兩件事,一是把日志信息轉換成字節數組,二是把字節數組寫入到輸出流。目前PatternLayoutEncoder 是唯一有用的且默認的encoder ,有一個節點,用來設置日志的輸入格式,使用“%”加“轉換符”方式。
例如:
%d表示日期,%thread表示線程名,%-5level表示級別從左顯示5個字符寬度,%msg是日志消息,%n是換行符,如果要輸出“%”則必須用“\”對“%”進行轉義。
下面介紹幾種常用的appender。
2.1 RollingFileAppender
滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件。這個是最常用的!
有以下子節點:
<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
filter: 表示過濾器,用法稍后講解。
<append>:如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。
<encoder>:對記錄日志進行格式化。
<rollingPolicy>:當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。
<triggeringPolicy >: 告知 RollingFileAppender 何時激活滾動。
<prudent>:當為true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個限制,1.不支持也不允許文件壓縮,2.不能設置file屬性,必須留空
2.1. 1 SizeAndTimeBasedRollingPolicy根據時間和文件大小的滾動策略
最常用的滾動策略,先根據時間再根據文件大小來滾動生成文件
例:
結果:
(此圖maxFileSize設置為5KB的結果,值比較小會有稍許偏差)
2.1.2 TimeBasedRollingPolicy根據時間的滾動策略
它根據時間來制定滾動策略,既負責滾動也負責觸發滾動。有以下子節點:
- fileNamePattern 必要節點,文件名必須包含“%d”轉換符, “%d”可以包含一個 java.text.SimpleDateFormat指定的時間格式,如:%d{yyyy-MM},如果直接使用 %d,默認格式是 yyyy-MM-dd。 RollingFileAppender 的file字節點可有可無,通過設置file,可以為活動文件和歸檔文件指定不同位置,當前日志總是記錄到file指定的文件(活動文件),活動文件的名字不會改變;如果沒設置file,活動文件的名字會根據fileNamePattern 的值,每隔一段時間改變一次。“/”或者“\”會被當做目錄分隔符。
- maxHistory 可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每個月滾動,且 <maxHistory>是6,則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件時,那些為了歸檔而創建的目錄也會被刪除。
例:每天生成一個日志文件,保存30天的
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>d://log/business.log.%d.log</FileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><logger name="com.jun.springdemo.controller" level="INFO" additivity="false"><appender-ref ref="file" /><appender-ref ref="STDOUT" /></logger>2.1.3 FixedWindowRollingPolicy固定窗口的滾動策略
根據固定窗口算法重命名文件的滾動策略。有以下子節點:
- minIndex:窗口索引最小值
- maxIndex:窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置為12。
- fileNamePattern :必須包含“%i”例如,假設最小值和最大值分別為1和2,命名模式為 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有log%i.log.zip
2.1.4 triggeringPolicy觸發策略
如果當前活動文件的大小超過指定大小會觸發當前活動文件滾動。只有一個節點:<maxFileSize>:當前活動日志文件的大小,默認值是10MB。
例:
2.1.5 filter
<!-- 控制臺輸出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>warn</level></filter><encoder><!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) [%logger{15}:%line] - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><root level="info"><appender-ref ref="STDOUT" /></root>這里雖然root日志級別為info,但是在appender中設置了過濾器,所以只會打印warn及warn級別以上的日志。
2.2 ConsoleAppender
把日志輸出到控制臺,有以下子節點:
<encoder>:對日志進行格式化,上面已介紹;
<target>:字符串 System.out 或者 System.err ,默認 System.out ;
例如:
2.3 FileAppender
把日志添加到文件,有以下子節點:
<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
<append>:如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。
<encoder>:對記錄事件進行格式化。
<prudent>:如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false。
例如:
<configuration> <appender name="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> <root level="DEBUG"> <appender-ref ref="FILE" /> </root> </configuration>總結
以上是生活随笔為你收集整理的最实用的logback讲解(2)—appender的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最实用的logback讲解(1)
- 下一篇: git(一) 基础必备