我使用Log4j和RollingFileAppender
根据大小创建日志轮换。
如何将其配置为在旋转之前记录每个文件一定量的时间?
例如,每个日志文件包含一小时的日志,在每小时的顶部旋转?
我使用Properties
对象(而不是log4j.properties
文件)在Java中以编程方式配置Log4j
答案 0 :(得分:30)
您可能想要使用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意味着您不能限制文件大小 - 如果您在给定的滚动周期内有大量日志,这可能会有问题。
答案 1 :(得分:3)
任何滚动文件appender要注意的另一件事是确保一次只有一个JVM访问特定的日志文件。这是因为log4j出于性能原因缓存了日志文件大小,如果多个JVM访问相同的文件,那么“滚动”会变得很糟糕。
答案 2 :(得分:3)
此外,
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
答案 3 :(得分:2)
特别是,将其'datePattern'属性设置为'.'yyyy-MM-dd-HH
会导致文件每小时轮换一次。
答案 4 :(得分:0)
您需要使用DailyRollingFileAppender。尽管它具有误导性的名称,但它可以配置为以最多几分钟的可配置时间段运行。