如何配置 log4j 只保留最近 n 天的日志文件?
How to configure log4j to only keep log files for the last n days?
我叫 Luis Ribeiro,我正在尝试设置 log4j,以便它删除旧的轮换日志。
我们目前的解决方案是通过脚本使用 cron。
例如像这样:How to configure log4j to only keep log files for the last seven days?
但这里有一些主要问题:
- 与数百台机器一起工作(n)
- 在许多机器上使用许多 crons(n * m)
- 使用不同的结构和 OS(n * m * z)
- 即使应用程序停止并且有 lost 信息
,Cron 也会删除
理想情况是,当应用程序运行时,log4j 将负责完成日志轮换。
- 每天轮换一次:RollingFile: Daily and filePattern="logs/${filename}.[ %d{yyyy-MM-dd} | -%i | any type of counter ].log.gz" with TimeBasedTriggeringPolicy
- 保留实际日志和 n 个轮换文件。旧的被删除:app.log, app.{-1 天}.log.gz,..., app.{-n 天}.log.gz
- 模式名称并不重要,它可以是文件名中的数字
- 我们不能使用大小作为触发器。我们不知道该程序在白天会执行多少操作。日志大小变化非常非常大
- 它应该是结构和os独立的。我们更喜欢增强 log4j 属性或 XMl 文件,而不是添加脚本和 cron 触发器。
我尝试将 DefaultRolloverStrategy 与 TimeBasedTriggeringPolicy 结合使用。但问题是:
- filePattern=${filename}.%d{yyyy-MM-dd}-%i.log.gz 将导致:app.log,app.{-1 天}-1。 log.gz, app.{-2 天}-1.log.gz,..., app.{-(n + 1) 天}-1.log.gz,... = > 永远不会被删除
- filePattern=${filename}-%i.log.gz 结果 java.lang.IllegalStateException:模式不包含日期
是否有任何方法可以增强 log4j,使其能够处理所有这些任务?
谨致问候,
路易斯
因为DailyRollingFileAppender没有属性MaxBackupIndex,所以你必须自己删除日志。
或者您可以执行 crontab 来清理房间,例如:
find /path/to/logs -type f -mtime +dayToKeep -exec rm -f {} \;
我叫 Luis Ribeiro,我正在尝试设置 log4j,以便它删除旧的轮换日志。
我们目前的解决方案是通过脚本使用 cron。 例如像这样:How to configure log4j to only keep log files for the last seven days?
但这里有一些主要问题:
- 与数百台机器一起工作(n)
- 在许多机器上使用许多 crons(n * m)
- 使用不同的结构和 OS(n * m * z)
- 即使应用程序停止并且有 lost 信息 ,Cron 也会删除
理想情况是,当应用程序运行时,log4j 将负责完成日志轮换。
- 每天轮换一次:RollingFile: Daily and filePattern="logs/${filename}.[ %d{yyyy-MM-dd} | -%i | any type of counter ].log.gz" with TimeBasedTriggeringPolicy
- 保留实际日志和 n 个轮换文件。旧的被删除:app.log, app.{-1 天}.log.gz,..., app.{-n 天}.log.gz
- 模式名称并不重要,它可以是文件名中的数字
- 我们不能使用大小作为触发器。我们不知道该程序在白天会执行多少操作。日志大小变化非常非常大
- 它应该是结构和os独立的。我们更喜欢增强 log4j 属性或 XMl 文件,而不是添加脚本和 cron 触发器。
我尝试将 DefaultRolloverStrategy 与 TimeBasedTriggeringPolicy 结合使用。但问题是:
- filePattern=${filename}.%d{yyyy-MM-dd}-%i.log.gz 将导致:app.log,app.{-1 天}-1。 log.gz, app.{-2 天}-1.log.gz,..., app.{-(n + 1) 天}-1.log.gz,... = > 永远不会被删除
- filePattern=${filename}-%i.log.gz 结果 java.lang.IllegalStateException:模式不包含日期
是否有任何方法可以增强 log4j,使其能够处理所有这些任务?
谨致问候, 路易斯
因为DailyRollingFileAppender没有属性MaxBackupIndex,所以你必须自己删除日志。
或者您可以执行 crontab 来清理房间,例如:
find /path/to/logs -type f -mtime +dayToKeep -exec rm -f {} \;