2009-06-26 216 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属性。因此,可以清理未来使用时可能不需要的旧日志文件。