如何配置log4j以仅保留最近n天的日志文件?

时间:2015-11-17 08:50:42

标签: java date logging cron

我的名字是Luis Ribeiro,我正在尝试设置log4j,以便删除旧的旋转日志。

我们现在的解决方案是使用带脚本的cron。 例如:How to configure log4j to only keep log files for the last seven days?

但是这里有一些重大问题:

  1. 使用数百台机器(n)
  2. 在许多机器中使用许多crons(n * m)
  3. 使用不同的结构和OS(n * m * z)
  4. 即使应用程序停止且信息丢失,Cron也会删除
  5. 理想情况是,当应用程序运行时,log4j将完成日志轮换。

    • 它将每天轮换一次:RollingFile:Daily和filePattern =" logs / $ {filename}。[%d {yyyy-MM-dd} | - %i |任何类型的柜台] .log.gz"使用TimeBasedTriggeringPolicy
    • 保留实际的日志和n个旋转文件。旧版被删除:app.log,app。{ - 1 day} .log.gz,...,app。{ - n days} .log.gz
    • 模式名称并不重要,它可以是文件名中的数字
    • 我们不能使用size作为触发器。我们不知道该计划在白天会做多少。日志大小变化非常非常
    • 它应该是结构和os独立的。我们更喜欢增强log4j属性或XMl文件,而不是添加脚本和cron触发器。

    我尝试将DefaultRolloverStrategy与TimeBasedTriggeringPolicy一起使用。但问题是:

    1. filePattern = $ {filename}。%d {yyyy-MM-dd} - %i.log.gz将导致:app.log,app。{ - 1 day} -1.log.gz,app。 {-2天} -1.log.gz,...,app。{ - (n + 1)天} -1.log.gz,... =>它永远不会被删除
    2. filePattern = $ {filename} - %i.log.gz导致java.lang.IllegalStateException:Pattern不包含日期
    3. 还有什么可以增强log4j所以它会处理所有这些任务吗?

      最诚挚的问候, 路易斯

1 个答案:

答案 0 :(得分:1)

因为DailyRollingFileAppender没有属性MaxBackupIndex,所以你必须自己删除日志。

或者您可以执行crontab进行大扫除,如:

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