使用 log4j2 2.5 归档日志文件

Archiving log file using log4j2 2.5

我一直在尝试存档早于特定时间段的应用程序日志文件。请注意,自 log4j 2.5 以来,我们有一个 Delete 标签,您可以根据该标签定义我们可以 delete/archive 我们的日志的标准。尝试使用它,但我无法以某种方式破解它。尝试使用 30 天 30d 值,但它在我的服务器上不起作用,20 秒策略 PT20S 在我的开发机器上也不起作用。

非常感谢任何方向。

XML如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    </Console>
    <RollingFile name="RollingFile" fileName="C://logs///test.log" filePattern="C://logs//test-%d{MM-dd-yyyy}.log.gz" ignoreExceptions="false">
      <PatternLayout pattern="%d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
      <TimeBasedTriggeringPolicy />
      <DefaultRolloverStrategy>
        <Delete basePath="C://logs//" maxDepth="2">
          <IfFileName glob="*/test-*.log.gz" />
          <IfLastModified age="PT20S" />
        </Delete>
      </DefaultRolloverStrategy>
    </RollingFile>
   </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="Console" />
      <AppenderRef ref="RollingFile" />
    </Root>
  </Loggers>
</Configuration>

如果您使用 Windows RollingFile appender 的文件和文件模式可以使用单斜线。双斜杠可能会混淆它。

在配置文件开头设置<Configuration status="trace">即可调试


更新:

滚动的文件最终位于 c:/logs 目录 (filePattern="C://logs//test-%d{MM-dd-yyyy}.log.gz")。

但是,删除操作配置为仅查看 c:/logs 的 子目录 中以 "log.gz" 结尾的文件。 c:/logs 目录中的文件本身与 glob="*/test-*.log.gz".

不匹配

要解决此问题,请使用 glob="test-*.log.gz"。 评论中提到将 glob 更改为 regex 也解决了问题。