logback:RollingFileAppender


RollingFileAppender :滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件

ps:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="1 seconds">

<contextName>webA</contextName>

<appender name="file" append="true" class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>/logs/log_file.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/logs/log_file_%d{yyyy-mm-dd.HH}.log</fileNamePattern>
<maxHistory>30</maxHistory>

<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>

<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>

<encoder>
<pattern>%cn%d.%M.%m%n</pattern>
</encoder>
</appender>

<root level="debug">
<appender-ref ref="file"/>
</root>

</configuration>

主要節點:
(1)file文件名,可選。若沒有設定參考下面fileNamePattern名稱生成文件
(2)rollingPolicy當日志發生滾動時,決定日志文件的行為。決定文件的重命名及路徑的變更。必選
其中class屬性決定出發哪套行為控制
fileNamePattern 滾動后產生的文件名規則
maxHistory日志保留時長,30天。超過天數后刪除日志文件,同時配套目錄一起刪除。該參數不一定是指天數,也可以是月份數。具體參考滾動規則fileNamePattern,看是依賴什么進行滾動的
totalSizeCap最大日志量
(3)triggeringPolicy 滾動觸發規則
maxFileSize單個文件最大量,如果達到這個最大量。日志有可能會出現報錯,新日志無法存入。

--注意:%cn:獲取上下文名稱contextName。該用法是<encoder>標簽的屬性,只能在該標簽使用。其他標簽不能使用
rollingPolicy、triggeringPolicy 有不同的class實現類,具體每個實現類的用法及參數屬性會有所不同。使用時注意區分


 
        

fileNamePattern的介紹

 
        

/wombat/foo.%d :
每天輪轉(晚上零點)。由於省略了指定 %d 的日期格式,所以默認為 yyyy-MM-dd。

 
        

/wombat/%d{yyyy/MM}/foo.txt:
每個月開始的時候輪轉。

 
        

/wombat/foo.%d{yyyy-ww}.log:
每周的第一天(取決於時區)輪轉。

 
        

/wombat/foo%d{yyyy-MM-dd_HH}.log:
每小時輪轉。

 
        

/wombat/foo%d{yyyy-MM-dd_HH-mm}.log:
每分鍾輪轉。

 
        

/wombat/foo%d{yyyy-MM-dd_HH-mm, UTC}.log:
每分鍾輪轉,時間格式為UTC。

 
        

/foo/%d{yyyy-MM, aux}/%d.log:
每天輪轉。歸檔文件在包含年月的文件夾下。

 
        

任何斜桿或者反斜杠夠會被當作文件夾分隔符。任何必要的文件夾都會在有需要的時候創建。可以將日志文件放在單獨的文件夾中。

 
        

TimeBasedRollingPolicy支持文件自動壓縮。如果 fileNamePattern以 .gz 或者 .zip結尾,將會啟動這個特性。

 
        

例如:/wombat/foo.%d.gz:每天輪轉(晚上零點),自動將歸檔文件壓縮成 GZIP 格式

 
        


RollingPolicy:TimeBasedRollingPolicy,SizeAndTimeBasedRollingPolicy,FixedWindowRollingPolicy
1、TimeBasedRollingPolicy 基於時間滾動
官方示例:

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logFile.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

 
        

      <!-- keep 30 days' worth of history capped at 3GB total size -->
      <maxHistory>30</maxHistory>
      <totalSizeCap>3GB</totalSizeCap>

 
        

    </rollingPolicy>

 
        

    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>

 
        

  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>

2、SizeAndTimeBasedRollingPolicy 基於時間+大小進行滾動。是對於第一種的補充。避免單個日志文件過大,不便於閱讀

<configuration>
  <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>


  <root level="DEBUG">
    <appender-ref ref="ROLLING" />
  </root>

</configuration>

mylog-%d{yyyy-MM-dd}.%i.txt其中的%i表示一天內滾動生成多個日志時的編碼

 

3、FixedWindowRollingPolicy 基於窗口滾動

可以理解成自定義滾動規則,避免使用出現單個文件過大或者日志文件過多的情況。需要同時配置triggeringPolicy用於指定滾動觸發規則

 

<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>

輸出規則:越早生成名稱序號越靠后。minIndex、maxIndex最小索引最大索引





TriggeringPolicy用於通知何時觸發滾動
實現類:SizeBasedTriggeringPolicy

SizeBasedTriggeringPolicy觀察當前活動文件的大小,如果已經大於了指定的值,它會給 RollingFileAppender 發一個信號觸發對當前活動文件的輪轉。

 
        

SizeBasedTriggeringPolicy 只接收 maxFileSize 這一個參數,它的默認值是 10 MB。

 
        

maxFileSize 可以為字節,千字節,兆字節,千兆字節,通過在數值后面指定一個后綴 KB,MB 或者 GB。例如,5000000,5000KB,5MB 以及 2GB 都是有效的,前三個是一樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM