我使用的是log4j2 - org.apache.logging.log4j-log4j-api-2.14.1.jar
对于清理策略,我使用的是CronbasedTriggerPolicy,在添加了基于cron的触发策略后,每当log4j2转储文件时,它都会将日期和时间戳替换为0
我的配置如下所示
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingFile fileName="data/appname-${date:yyyy-MM-dd_HH:mm:ss:SSS}.gz" filePattern="data/appname-%d{yyyy-MM-dd_HH:mm:ss.SSS}.%03i.gz" name="AppAppender">
<PatternLayout>
<pattern>%-6p %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1}: %m%n
</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10MB"/>
<CronTriggeringPolicy schedule="*/5 * * * *"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="data/" maxDepth="2">
<IfFileName glob="*appname-*.gz"/>
<IfLastModified age="1d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger additivity="false" name="com.app.Test">
<AppenderRef ref="AppAppender"/>
</Logger>
</Loggers>
</Configuration>当日志被写入文件时,文件看起来像这样- appname-2021-10-28_16:35:01:393.gz
将文件更改滚动到此文件后- appname-2021-10-28_00:00:00.000.001.gz
为什么log4j2要将时间戳更改为全0?这是在我添加cron触发策略后开始发生的,如果我删除它,事情就会像预期的那样工作。我的最终议程是让log4j2删除所有超过2周的文件。我现在只是在玩一天的配置。
发布于 2021-10-28 22:37:34
虽然,我仍然不清楚为什么cron触发器会将时间戳更改为全0,但我实现了我想要实现的目标,我对delete标签的理解还不够清楚。我通读了log4j2文档,我意识到我错过了他们解释无论何时发生翻转都会删除的部分,出于我的需求,我意识到没有必要首先使用cron触发器策略。每次log4j2翻转文件时,都会尝试运行删除操作。
https://stackoverflow.com/questions/69761360
复制相似问题