首页 > 解决方案 > Log4j2 翻转时间戳错误的文件

问题描述

我正在使用 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 周的文件。我现在只是在玩配置一天。

标签: log4j2

解决方案


虽然,我仍然不清楚为什么cron触发器会将时间戳更改为全0,但我实现了我想要实现的目标,我对删除标签的理解还不够清楚。我通读了 log4j2 文档,我意识到我错过了他们解释每当翻转发生时删除工作的部分,出于我的需要,我意识到首先不需要有 cron 触发策略。每次 log4j2 翻转文件时,删除都会尝试运行。


推荐阅读