日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最实用的logback讲解(2)—appender

發布時間:2024/9/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最实用的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 ,有一個節點,用來設置日志的輸入格式,使用“%”加“轉換符”方式。
例如:

<encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} [%thread] %-5level [%logger{15}:%line] - %msg%n</pattern><charset>UTF-8</charset></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根據時間和文件大小的滾動策略

最常用的滾動策略,先根據時間再根據文件大小來滾動生成文件
例:

<property name="LOG_HOME" value="d://log2" /><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- rollover daily --><fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- each file should be at most 5MB, keep 60 days worth of history, but at most 20GB --><maxFileSize>5MB</maxFileSize><maxHistory>60</maxHistory><totalSizeCap>20GB</totalSizeCap></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} - %msg%n</pattern><charset>UTF-8</charset></encoder></appender>

結果:
(此圖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
<?xml version="1.0" encoding="UTF-8"?> <configuration><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>test.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>tests.%i.log.zip</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize></triggeringPolicy><encoder><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender><root level="DEBUG"><appender-ref ref="FILE" /></root> </configuration>

2.1.4 triggeringPolicy觸發策略

如果當前活動文件的大小超過指定大小會觸發當前活動文件滾動。只有一個節點:<maxFileSize>:當前活動日志文件的大小,默認值是10MB。
例:

<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>25MB</MaxFileSize></triggeringPolicy>

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 ;
例如:

<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 控制臺輸出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><!--格式化輸出:%d表示日期,%thread表示線程名,%highlight()高亮顯示,%-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="error"><appender-ref ref="STDOUT" /></root></configuration>

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。