使用Log4j2.8,有没有一种方法可以让我的日志每天旋转,但使当前文件具有恒定的名称?
示例:
my.log <-- current day (2017-02-13)
my-2017-02-12.log <-- last log
my-2017-02-11.log <-- second to last log
我尝试了以下配置,但没有成功:
<RollingFile name="RollingFileMain" fileName="my.log"
filePattern="my-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>%level{length=1} %d{yyyy-MM-dd HH:mm:ss} %c{-3} (%F:%L) %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="2"/>
</RollingFile>
此外,当我在某一天首次启动应用程序时,我会遇到以下例外情况:
2017-02-14 09:28:38,334 main ERROR An exception occurred processing Appender RollingFileMain java.lang.NullPointerException
at org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:107)
at org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:96)
at org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:89)
at org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purgeAscending(DefaultRolloverStrategy.java:212)
at org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purge(DefaultRolloverStrategy.java:199)
at org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.rollover(DefaultRolloverStrategy.java:326)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:310)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:227)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(RollingFileManager.java:207)
at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:267)
at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:403)
at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1988)
at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1960)
at org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1297)
at my.package.MainKt.main(Main.kt:48)
这个问题似乎是@Remko Popma的答案和log4j22.8中的一个bug的结合。在应用filePattern=“my-%d{yyyy-MM-dd}.log”
并降级到2.7版后,一切正常。
我在这里提交了一个关于坠机的问题:https://issues.apache.org/jira/browse/LOG4J2-1815
请将您的文件模式更改为filepattern=“my-%d{yyyy-MM-dd}.log”
:
%i仅在使用SizeBasedTriggeringPolicy时有用。如果您只有一个基于时间的触发策略,Log4j会被%i。。。
我在研究这个问题时发现的几乎所有内容都是针对Log4J1.x的,并讨论了一个似乎在2.0中不存在的datePattern参数。 下面是我的log4j2.xml文件: 我正在将信息和以上内容写入日志文件,并将调试写入控制台(目前)。这些文件被写得很好,但它们似乎每天都在滚动(这似乎是默认的)。
我们在Apache Tomcat上使用log4j2.3。我们最近从log4j1.2升级到log4j2.0。除了一个问题,它工作得很好。我们使用RollingFile Appender每天滚动日志文件。正如预期的那样,文件会在午夜之后滚动,但是当前日志文件不会清除前一天的日志条目。我们最终得到了一个日志文件,它的大小不断增加,并且包含了所有前几天的条目。 这是我们的滚动文件Appender配置: 有
我希望由log4j2创建的日志文件在其文件名中包含日期模式,包括当前活动文件。也就是说,如果今天的日期是2016-12-15,我希望当前日志文件是lager-2016-12-15.log。当日期改变时,我希望创建一个名为lager-2016-12-16.log的新文件。 使用,我无法使当前活动日志文件的文件名中具有日期模式。我的log4j2.xml: 使用此配置,翻转时的复制被搞乱了。从fileN
Spring boot附带了几个默认的日志框架配置,包括Log4j2。虽然Spring boot参考手册中有关于日志记录的详细文档,但它没有提到默认日志模式的具体配置方式和位置,这使得重写此模式变得很困难。 问题是Spring Boot在哪里为Log4j2配置默认的日志模式? 到目前为止,我已经查看了Spring Boot的以下位置:
我目前正在使用log4j2为我的web应用程序编写日志。我已经配置了一个滚动文件追加器,可以在每晚午夜滚动。 我的log4j2.xml如下: 目前,这会写入名为application.log的日志,然后在午夜将当前的application.log文件复制到application yyy-MM-DD . log(文件名中的日期会被正确替换),并在第二天继续在application.log中记录日志。
我好像拿不到滚动日志文件。 我的logback.xml配置有以下内容: 有意思。SIFT中“unknown.log”文件中的条目在分钟的停止处停止。之后,不会向SIFT文件写入任何内容,但我一直在catalina.out中获取条目: