2015-11-17 70 views
0

我的名字是Luis Ribeiro,我正在設置log4j,這樣它會刪除舊的旋轉日誌。如何將log4j配置爲僅保留最近n天的日誌文件?

我們現在的解決方案是使用cron和腳本。 例如像這樣:How to configure log4j to only keep log files for the last seven days?

但這裏有一些重大問題:

用機器(N)
  • 在許多機器很多crons(N * M)
  • 工作百
    1. 工作使用不同的結構和操作系統(n * m * z)
    2. 即使應用程序停止並且存在信息丟失,Cron也會刪除

    理想的是,當應用程序運行時,log4j會小心完成日誌輪換。

    • 它會旋轉每天一次:RollingFile:每天和filePattern =「日誌/ $ {文件名} [%d {YYYY-MM-DD} | - %I |任何類型的計數器] .LOG。 gz「with TimeBasedTriggeringPolicy
    • 保留實際的日誌和n個循環文件​​。舊版被刪除:app.log,app。{ - 1天} .log.gz,...,app。{ - n天} .log.gz
    • 模式名稱並不重要,它可以是數字在文件名
    • 我們不能使用大小作爲觸發器。我們不知道該節目在一天中會做多少。日誌大小變化非常非常大
    • 它應該是結構和操作系統無關的。我們更願意增強log4j屬性或XMl文件,而不是添加腳本和cron觸發器。

    我嘗試使用DefaultRolloverStrategy和TimeBasedTriggeringPolicy。但問題是:

    1. filePattern = $ {文件名}%d {YYYY-MM-DD} - %i.log.gz將導致:app.log,應用{ - 11天} - 1.log.gz,app。{ - 2 day} -1.log.gz,...,app。{ - (n + 1)days} -1.log.gz,... =>它永遠不會被刪除
    2. filePattern = $ {文件名} - %i.log.gz導致java.lang.IllegalStateException:模式不包含日期

    有沒有走,以增強log4j的,因此將採取關心所有這些任務?

    與問候, 路易斯

  • 回答

    1

    因爲DailyRollingFileAppender沒有屬性MaxBackupIndex,所以你必須自行刪除日誌。

    或者你可以像大掃除執行的crontab:

    find /path/to/logs -type f -mtime +dayToKeep -exec rm -f {} \; 
    
    +0

    謝謝您的回答。我會繼續搜索 –

    相關問題