2017-02-13 13 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":

% i полезен только при использовании SizeBasedTriggeringPolicy. Если у вас есть только TimeBasedTriggeringPolicy, Log4j запутывается в% я ...

+0

Это не работает. Я редактировал свой вопрос, чтобы включить исключение, которое я получаю, когда пытаюсь это сделать. –