2016-01-09 90 views
5

我要的是:如何刪除較舊的翻轉log4j2日誌,保持最多10個文件?

最大的10
  • 日誌文件,在
  • 每個日誌文件,並不比大小超過50MB。

因此,日誌文件夾永遠不會增長(50MB * 10)= 500MB。

但似乎我的log4j2配置沒有正確完成。

正在發生的事情是:

  • 日誌後做50 MB
  • 滾過但也有高達10個日誌保持每天
  • 因此,沒有保存的日誌文件數量的限制在日誌文件夾中(由於用於例如,2天,20個日誌的每個50MB的收集)

這裏是配置:

<Configuration status="WARN"> 
    <Appenders> 
     <RollingFile name="RollingFile" fileName="log/my.log" filePattern="log/my-%d{MM-dd-yyyy}-%i.log"> 
      <PatternLayout> 
       <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="50 MB"/> 
      </Policies> 
      <DefaultRolloverStrategy max="10"/> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Root level="info"> 
      <AppenderRef ref="RollingFile"/> 
     </Root> 
    </Loggers> 
</Configuration> 

我在做什麼錯?

回答

4

從2.5開始,Log4j支持在每次翻轉時執行的custom Delete action

您可以控制哪些文件被刪除:

  1. 名稱(匹配globregex
  2. Age( 「刪除,如果14天以上」)
  3. 計數(「保持僅最近3 「)
  4. 尺寸(」 只保留最近的文件備份到500MB「)

以上可以結合使用。而不是隻指定一個大小條件以使磁盤使用率降低到最大500MB,最好還要匹配名稱,以便不會無意中刪除無關的文件。

需要更細緻地控制要刪除哪些文件的用戶可以使用任何受支持的JSR-223腳本語言來指定腳本條件。

請查看documentation,它有三個完整的示例可能有用。

對於你的問題,這摘錄可以工作:

<DefaultRolloverStrategy> 
    <!-- 
     * only files in the log folder, no sub folders 
     * only rolled over log files (name match) 
     * either when more than 10 matching files exist or when the max disk usage is exceeded 
    --> 
    <Delete basePath="log" maxDepth="1"> 
     <IfFileName glob="my-??-??-????-*.log"> 
     <IfAny> 
      <IfAccumulatedFileSize exceeds="500 MB" /> 
      <IfAccumulatedFileCount exceeds="10" /> 
     </IfAny> 
     </IfFileName> 
    </Delete> 
    </DefaultRolloverStrategy> 

順便說一句,注意,您可以compress log files on rollover使它們佔用較少的磁盤空間。

最後,要小心!沒有辦法恢復這種方式刪除的文件。 :-)

+0

任何方式在log4j 2.1中做? –

+0

不作爲Log4j函數。你需要腳本來刪除操作系統中的舊日誌...... –

+1

儘管我強烈建議升級。任何你無法升級的原因? –

1

TimeBasedTriggeringPolicy作品基於filePattern。基本上,文件模式(%d)中的最小時間單位是觸發時間間隔。在你的情況下,價值是'dd',因此該政策每天觸發。

filePattern中%i的存在會將多個日誌文件保留一天。 我會推薦嘗試中的%i