Log4j 2 翻转未在预期时间发生

Log4j 2 rollover not happening at expected time

我正在使用 log4j2 滚动文件追加器进行日志记录。记录器的流量非常稀少。我希望记录器在适当的时间翻转文件。我该怎么做?

这是 ls -lrth 命令对日志文件的输出。


-rw-r--r-- 1 root root  136 Apr 27 15:51 logfile-04-20150427-07-00.log.gz
-rw-r--r-- 1 root root  133 Apr 27 23:18 logfile-04-20150427-15-00.log.gz
-rw-r--r-- 1 root root  151 Apr 28 04:40 logfile-04-20150427-23-00.log.gz
-rw-r--r-- 1 root root  161 Apr 28 05:14 logfile-04-20150428-04-00.log.gz
-rw-r--r-- 1 root root  134 Apr 28 06:45 logfile-04-20150428-05-00.log.gz
-rw-r--r-- 1 root root  125 Apr 28 08:46 logfile-04-20150428-06-00.log.gz
-rw-r--r-- 1 root root  191 Apr 28 09:27 logfile-04-20150428-08-00.log.gz
-rw-r--r-- 1 root root  281 Apr 28 10:43 logfile-04-20150428-09-00.log.gz

很明显,记录器没有在适当的时候轮换日志文件。 (查看文件的修改时间和日志文件时间戳)。 以下是我对记录器的 log4j2.xml 配置。

<RollingFile name="userlogfileAppender"
             fileName="${sys:catalina.home}/webapps/miscLogs/uData/logfile/logfile.log"
             filePattern="${sys:catalina.home}/webapps/miscLogs/uData/logfile/logfile-${logfileId}-%d{yyyyMMdd-HH}-00.log.gz"
             immediateFlush="true"
             bufferedIO="false">
        <PatternLayout>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    </RollingFile>

    <logger additivity="false" name="userlogfileLogger" level="debug">
        <AppenderRef ref="userlogfileAppender"/>

翻转不是由 log4j2 中的计时器驱动的,而是由日志事件驱动的。 rollover appender 会将日志事件的时间戳与预定的rollover 时间进行比较,如果超过了rollover 时间,则文件将被roll over。

这意味着如果流量稀少,通常不会有日志事件在预定的轮转时间触发轮转。翻滚将在预定的翻滚时间之后的下一个事件发生,这可能是几个小时后。

Log4j2目前没有强制翻转的定时器机制。根据这对任务的关键程度,您可以在应用程序中创建一个计时器,每小时记录一次事件以强制翻转。