2017-02-13 150 views
1

使用Log4j2 2.8,有沒有辦法讓我的日誌每天都在旋轉,但是讓當前文件有一個常量名?Log4j2 RollingFile每日循環

例子:

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) 
+0

downvote的任何原因? –

回答

0

這個問題似乎是@Remko Popma的回答的組合,並且在Log4j2 2.8的錯誤。在應用filePattern="my-%d{yyyy-MM-dd}.log"並降級到版本2.7後,一切都按預期工作。

我在這裏提交了關於崩潰的問題:https://issues.apache.org/jira/browse/LOG4J2-1815

+0

解決https://issues.apache.org/jira/browse/LOG4J2-1818固定LOG4J2-1815。 – rgoers

+0

該問題提到在路徑之前添加「。\」作爲解決方法。 –

0

請將您的文件模式修改爲filePattern="my-%d{yyyy-MM-dd}.log"

僅當您使用SizeBasedTriggeringPolicy時,%i纔有用。如果你只有一個TimeBasedTriggeringPolicy,Log4j的得到由%I困惑......

+0

這似乎並不奏效。我編輯了我的問題,以包含我嘗試這種方式時遇到的異常。 –