如何在Log4j中根据时间而不是大小来旋转日志文件?

我使用Log4j和RollingFileAppender根据大小创建日志轮换。

如何将其配置为在旋转前记录每个文件一段时间

例如,每个日志文件包含一小时的日志,在每小时的顶部旋转?

我使用Properties对象以编程方式在Java中配置Log4j(而不是log4j.properties文件)

您可能想要使用DailyRollingFileAppender 。 例如,要按小时滚动它们,您将使用'.'yyyy-MM-dd-HH的DatePattern。 对于log4j.properties文件:

 log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH ... 

或者为您的程序化配置:

 DailyRollingFileAppender appender = new DailyRollingFileAppender(); appender.setDatePattern("'.'yyyy-MM-dd-HH"); Logger root = Logger.getRootLogger(); root.addAppender(appender); 

不幸的是,使用DailyRollingFileAppender意味着您不能限制文件大小 – 如果您在给定的滚动周期内有大量日志,这可能会有问题。

另外,

 log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender **log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH** 

以下列表显示了log4j定义的所有日期模式,

 Minutely '.'yyyy-MM-dd-HH-mm application.log.2013-02-28-13-54 Hourly '.'yyyy-MM-dd-HH application.log.2013-02-28-13 Half-daily '.'yyyy-MM-dd-a application.log.2013-02-28-AM app.log.2013-02-28-PM Daily '.'yyyy-MM-dd application.log.2013-02-28 Weekly '.'yyyy-ww application.log.2013-07 app.log.2013-08 Monthly '.'yyyy-MM application.log.2013-01 app.log.2013-02 

使用任何滚动文件appender时要注意的另一件事是确保一次只有一个JVM访问特定的日志文件。 这是因为log4j缓存日志文件大小是出于性能原因,如果多个JVM访问相同的文件,那么“滚动”会变得很糟糕。

使用DailyRollingFileAppender 。

特别是,将其’datePattern’属性设置为'.'yyyy-MM-dd-HH会导致文件每小时旋转一次。

您需要使用DailyRollingFileAppender 。 尽管它具有误导性的名称,但它可以配置为在最多几分钟的可配置时间段内运行。