按大小和时间滚动日志

我使用log4j 1.2.16 RollingFileAppender ,当它们达到一定大小时会滚动日志文件。 现在我想每天滚动日志文件当它们达到一定大小时。 因此,每天将有一个或多个日志文件。

例如,

  myapp.log
 MYAPP-17.12.2013.log
 MYAPP-16.12.2012.log
 MYAPP-16.12.2012.1.log
 MYAPP-16.12.2012.2.log

是否有一个现成的appender,它已经做到了吗?

确实有两种选择:

  1. 使用LogBack及其大小和时间触发策略: http ://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP
  2. Log4J的TimeAndSizeRollingAppender来自: http : //www.simonsite.org.uk/

请记住,这两个选项都使用文件重命名。 如果有另一个脚本自动移动这些文件,请仔细考虑这一点。 当两个进程处理同一文件时,文件重命名是有风险的。

我的建议是直接在模式中写入不可变日志文件名:myapp- {dd.MM.yyyy}。{X} .log。 那样“滚动”只是关闭一个文件并打开一个新文件。 没有重命名。 没有背景线程。

快速回答是“不”。 看看log4j的javadoc: https : //logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html

只有两个开箱即用的文件追加器:DailyRollingFileAppender和RollingFileAppender(不建议使用第一个,因为它有同步问题)。

要实现您想要的function,您应该创建自己的appender,扩展RollingFileAppender并修改它以在日期更改时滚动文件。 修改方法是:

  protected void subAppend(LoggingEvent event) 

您可以在此处查看其来源: http : //www.docjar.com/html/api/org/apache/log4j/RollingFileAppender.java.html (第274行)。

您只需复制并粘贴代码并更改if调用rollOver以满足您的需求。

下面的配置xml将完成这项工作:需要JAR:log4j-rolling-appender-20150607-2059