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

IT小君   2022-01-12T06:26:16

我使用 Log4jRollingFileAppender来根据大小创建日志轮换。

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

例如,让每个日志文件包含一小时的日志,在每个小时的顶部轮换?

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

评论(5)
IT小君

您可能想使用DailyRollingFileAppender例如,要每小时滚动一次,您可以使用'.'yyyy-MM-dd-HH. 对于 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 意味着您无法限制文件大小 - 如果您在给定的滚动期间有大量日志,这可能会出现问题。

2022-01-12T06:26:16   回复
IT小君

此外,

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
2022-01-12T06:26:17   回复
IT小君

使用任何滚动文件附加程序要注意的另一件事是确保一次只有一个 JVM 访问特定的日志文件。这是因为 log4j 出于性​​能原因缓存日志文件大小,如果多个 JVM 访问相同的文件,您的“滚动”将会变得不稳定。

2022-01-12T06:26:17   回复
IT小君

使用DailyRollingFileAppender

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

2022-01-12T06:26:17   回复
IT小君

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

2022-01-12T06:26:17   回复