使用 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 也解决了问题。
我一直在尝试存档早于特定时间段的应用程序日志文件。请注意,自 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 也解决了问题。