如何让log4j删除旧的旋转日志文件?

ski*_*ppy 58 log4j rotation

如何让log4j删除旧的旋转日志文件?我知道我可以设置自动化作业(UNIX的cron和Windows的计划任务),但我希望它跨平台,我希望它在我们的应用程序的日志配置中作为我们的应用程序的一部分,而不是在OS之外的单独代码中特定的脚本语言.我们的应用程序不是用OS脚本语言编写的,我不想在其中执行此部分操作.

Jar*_*aus 53

RollingFileAppender就是这样做的.您只需将maxBackupIndex设置为备份文件的最高值即可.

  • 有没有办法用DailyRollingFileAppender做到这一点? (48认同)
  • 不,不是标准的 - 请参阅下面的user3195649的回答.相信log4j的Apache Extras确实有类似的东西. (3认同)

小智 43

日志因某种原因而旋转,因此您只能保留这么多日志文件.在log4j.xml中,您可以将其添加到您的节点:

<param name="MaxBackupIndex" value="20"/>
Run Code Online (Sandbox Code Playgroud)

该值告诉log4j.xml只保留20个旋转的日志文件.如果你想要甚至1,你可以将其限制为5.如果你的应用程序没有记录那么多数据,并且你有20个日志文件跨越过去8个月,但你只需要一周的日志,那么我认为你需要调整你的log4j.xml"MaxBackupIndex"和"MaxFileSize"参数.

或者,如果您使用属性文件(而不是xml)并希望保存15个文件(例如)

log4j.appender.[appenderName].MaxBackupIndex = 15
Run Code Online (Sandbox Code Playgroud)

  • 这适用于DailyRollingFileAppender吗? (10认同)
  • 不,请参阅 [此处](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/RollingFileAppender.html) 和 [此处](https://logging.apache.org/log4j/ 1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html)。DailyRolling 不继承 Rolling,因此该属性不存在 (2认同)

use*_*649 9

没有默认值来控制删除DailyRollingFileAppender创建的旧日志文件.但您可以编写自己的自定义Appender来删除旧的日志文件,其方式与为RollingFileAppender设置maxBackupIndex的方式非常相似.

这里有简单的说明

1开始:

如果您尝试将Apache Log4J DailyRollingFileAppender用于日常日志文件,则可能需要指定应保留的最大文件数.就像滚动RollingFileAppender支持maxBackupIndex一样.但是,如果您使用DailyRollingFileAppender,则当前版本的Log4j(Apache log4j 1.2.16)不提供删除旧日志文件的任何机制.我试图在DailyRollingFileAppender的原始版本中进行小的修改以添加maxBackupIndex属性.因此,可以清理旧日志文件,这些日志文件可能不需要将来使用.