2009-06-26 132 views
50

我如何獲得log4j刪除舊的循環日誌文件?我知道我可以設置自動化作業(UNIX的cron和Windows的計劃任務),但我希望它跨平臺,我希望它在我們應用程序的日誌配置中作爲我們應用程序的一部分,而不是在操作系統之外的單獨代碼中特定的腳本語言。我們的應用程序不是用OS腳本語言編寫的,我不想在它們中做這部分。如何獲得log4j刪除舊的循環日誌文件?

回答

44

RollingFileAppender進行此操作。您只需將maxBackupIndex設置爲備份文件的最大值即可。

+42

有沒有辦法與DailyRollingFileAppender做到這一點? – 2012-07-16 18:21:23

37

日誌旋轉是有原因的,所以你只能保存這麼多的日誌文件。在log4j.xml文件,你可以添加到您的節點:

<param name="MaxBackupIndex" value="20"/> 

值告訴的log4j.xml到只保留大約20個旋轉的日誌文件。如果你想要甚至1,你可以將它限制爲5個。如果你的應用程序沒有記錄那麼多的數據,並且你有20個日誌文件跨越過去8個月,但你只需要幾周的日誌,那麼我認爲你需要調整你的log4j.xml「MaxBackupIndex」和「MaxFileSize」參數。

另外,如果您使用的是屬性文件(而不是XML)和要保存15個文件(例如)

log4j.appender.[appenderName].MaxBackupIndex = 15 
+6

這是否適用於DailyRollingFileAppender? – rogerdpack 2014-03-27 17:44:30

7

沒有默認值來控制刪除由DailyRollingFileAppender創建的舊日誌文件。但是您可以編寫自己的自定義Appender,以與爲RollingFileAppender設置maxBackupIndex的方式非常相似的方式刪除舊日誌文件。

簡單的指令發現here

1

如果你想使用Apache Log4J的DailyRollingFileAppender爲每天的日誌文件,則可能需要要指定文件的最大數量即應被保存。就像滾動RollingFileAppender支持maxBackupIndex一樣。但是,如果您使用的是DailyRollingFileAppender,則當前版本的Log4j(Apache log4j 1.2.16)不提供任何刪除舊日誌文件的機制。我試圖在DailyRollingFileAppender的原始版本中進行小的修改以添加maxBackupIndex屬性。因此,可以清理未來使用時可能不需要的舊日誌文件。