【问题标题】:Log4j2 overwrites past day log fileLog4j2 覆盖过去一天的日志文件
【发布时间】:2018-09-01 02:19:33
【问题描述】:

我正在使用 Log4j2 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 日)很好,但是当 catalina.2018-03-22.log 包含今天(3 月 22 日)的其余日志时,今天被 2018-03-22 的一些日志覆盖了

有什么想法吗?

【问题讨论】:

  • 您是否有多个应用程序写入同一个日志文件?
  • @FranMontero 是的,我有其他模块使用 JDK14Logger 保存到同一个文件。一切都很好,直到将 Log4j 切换到 Log4j2
  • @FranMontero 可能很简单我不需要RollingFile,因为当前日期无论如何都会附加到日志文件名?

标签: java log4j2 pattern-layout


【解决方案1】:

Log4j 2.3 有点老了,2015-05-09 发布,快 3 年了。所以尝试使用更新的版本; 2.11.0 版是目前最新的版本,于 2018-03-11 发布。

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

【讨论】:

  • 因为JDK6需要使用
  • @JackTheKnife 更新了答案。
【解决方案2】:

试试

BasicConfigurator.resetConfiguration()

BasicConfigurator.configure()之后使用logger的方法中

【讨论】:

  • 我的代码中没有BasicConfigurator.configure()
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    在基于时间的 TimeBasedTriggeringPolicy 时间间隔中提及 1 它将每天滚动文件

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 2019-09-30
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多