Log4j2覆盖过去的日志文件

时间:2018-03-22 15:09:37

标签: java log4j2 pattern-layout

我正在使用Log4j2 ver 2.3

log4j2.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
    <RollingFile name="RollingFile"
                 fileName="${sys:catalina.base}/logs/catalina.${date:yyyy-MM-dd}.log"
                 filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log">
        <PatternLayout pattern="[TID=%X{TId}] %d{MMM dd, yyyy HH:mm:ss,SSS} %c %M:%L %p: %m%n"/>
        <TimeBasedTriggeringPolicy modulate="true" />
    </RollingFile>
</Appenders>
<Loggers>
    <Root level="DEBUG" >
        <AppenderRef ref="RollingFile" />
    </Root>
</Loggers>
</Configuration>

所有工作正常,直到第二天前一天的日志被当天的某些日志覆盖。

实施例: catalina.2018-03-21.log昨天(3月21日)没事,但今天被2018-03-22的一些日志所覆盖,当时catalina.2018-03-22.log包含今天(3月22日)的剩余日志< / p>

有什么想法?

4 个答案:

答案 0 :(得分:2)

Log4j 2.3有些陈旧,于2015-05-09发布,差不多3岁。所以尝试使用更新版本;版本2.11.0是最新版本,于2018-03-11发布。

更新:要继续使用Log4j 2.3,您可以危及您的要求。其中一个选项可能是使用fileName属性的静态值。例如。 .../catalina.log.../catalina.current.log

答案 1 :(得分:0)

尝试

BasicConfigurator.resetConfiguration()
BasicConfigurator.configure()

之后使用记录器的方法中的

答案 2 :(得分:0)

尝试将自动增量变量添加到文件模式(%i)。 这对我来说很好。

filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.%i.log"

答案 3 :(得分:0)

基于时间的TimeBasedTriggeringPolicy时间间隔为 1 ,它将每天更新文件