Log4j2 v2.12.0存档日志覆盖未迭代

时间:2019-07-25 19:58:59

标签: log4j2

我正在使用OnStartupTriggeringPolicy触发将日志翻转到存档文件夹,但是存档日志始终使用1作为迭代值,重命名同一天已经存在的所有存档日志。

我可以避免完全使用OnStartupTriggeringPolicy,但是如果%i变量未正确迭代,我认为这不能从逻辑上解决问题。即使%i变量在程序运行时已针对SizeBasedTriggeringPolicy正确进行了迭代,但如果应用程序重新启动,它仍可能会重置为1,从而导致存档日志文件被覆盖。

我尝试剥离配置的各个元素并更改值,但没有看到这种行为更改。作为一种解决方法,我将小时,分钟和秒放入filePattern中,但这导致日志文件每秒滚动一次,这是不可行的。

这是我精简的log4j2.xml配置。

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="WARN">
  <Properties>
    <Property name="LOG_DIR">C:\\logdir\\appname</Property>
    <Property name="ARCHIVE">${LOG_DIR}\\archive</Property>
    <Property name="PATTERN">%d [%-5level] (%t) - %m - (%c{3})%n</Property>
    <Property name="MSGONLY">%m</Property>
  </Properties>
  <Appenders>

    <RollingFile name="DFILE"
                 fileName="${LOG_DIR}\\appname-debug.log" append="true"
                 filePattern="${ARCHIVE}\\appname-debug.log.%d{yyyy-MM-dd}(%i).gz"
                 ignoreExceptions="false">
        <PatternLayout pattern="${PATTERN}"/>
        <Policies>
            <OnStartupTriggeringPolicy minSize="1" />
            <SizeBasedTriggeringPolicy size="10 MB" />
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    </RollingFile>

  </Appenders>
  <Loggers>
    <Root level="TRACE">
      <AppenderRef ref="DFILE" level="DEBUG"/>
    </Root>
  </Loggers>
</Configuration>

/ archive /文件夹始终只包含1个名为的压缩日志

appname-debug.log.2019-07-25(1).gz 

无论我重新启动应用程序多少次。

编辑/解决方案:

filePattern中的括号以某种方式中断了迭代。删除它们解决了该问题。所以-%i.gz而不是(%i).gz。

0 个答案:

没有答案