log4j DailyRollingFileAppender不会创建具有日期模式的文件

时间:2014-09-24 01:34:50

标签: java logging log4j

在Java 8应用程序中使用org.apache.log4j,我希望每小时创建一个新的日志文件,例如:“mylog.log.2014-09-24-18”。 我读过我需要使用DailyRollingFileAppender,但是当我启动应用程序时,日志文件名为“mylog.log”。

这是我的log4j.properties文件的内容:

# Set root logger level and its appenders
log4j.rootLogger=DEBUG, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.file.Append=true
log4j.appender.file.File=mylog.log
log4j.appender.file.encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

请告诉我如何实现这一目标?

2 个答案:

答案 0 :(得分:5)

我将DatePattern设置为log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm,当我第一次登录时,日志写入mylog.log,一分钟后,日志写入mylog.log.2014-09-24-10-42。所以我认为你的日志第一次写入mylog.log,一小时后,系统将生成一个名为'mylog.log.2014-09-24-10'的文件。

答案 1 :(得分:2)

根据我的理解,您要查找的是,您希望活动日志文件已在文件名中创建日期/时间,并且一旦需要滚动,它将只是使用最新日期/时间登录到新文件在文件名中。

如果我的理解是正确的,我想知道log4j 1.x是否可以做你想要的。

Log4J只是写入mylog.log,滚动后,它会将原始mylog.log移至mylog.log.yyyy-mm-dd,然后再次创建新的mylog.log

如果您使用的是SLF4J,并且没有特殊原因让您坚持使用Log4J作为后端,Logback实际上正在提供您所需要的内容:

http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy

忽略file中的RollingFileAppender属性,并在TimeBasedRollingPolicy中设置文件模式。创建日志文件的方式将是您所期望的。