带有路由附加程序的 Log4J2 不归档文件

Posted

技术标签:

【中文标题】带有路由附加程序的 Log4J2 不归档文件【英文标题】:Log4J2 with Routing appender does not archive files 【发布时间】:2016-04-15 20:39:06 【问题描述】:

我正在尝试为 log4j2 文件添加路由以记录到名称包含其进程 ID 的文件。这使用路由并指定一些注入进程ID查找的代码。但是,这些文件似乎不再正确存档 - 每次我启动进程时,都会使用进程 ID 正确生成一个新文件,但是存档目录中没有任何内容。

此外,即使我不使用路由,而只是使用带有 OnstartupTriggeringPolicy 的 RollingFile 附加程序,我也无法弄清楚如何在存档中最多保留 5 个文件。

<Routing name="Routing">
    <Routes pattern="$$process:Id">
        <Route>
            <RollingFile name="logFile"
                fileName="$LOG_DIR/erdaemon-$process:Id.log" 
                filePattern="$ARCHIVE/erdaemon.%dyyyy-MM-dd-hh-mm.log">
                <PatternLayout pattern="$PATTERN" />
                <Policies>
                    <OnStartupTriggeringPolicy />
                </Policies>
            </RollingFile>

        </Route>
    </Routes>
</Routing>
<Async name="async" bufferSize="1000" includeLocation="true">
    <AppenderRef ref="Routing" />
</Async>
</Appenders>
<Loggers>
    <Root level="INFO">
        <AppenderRef ref="async"/>
    </Root>
    <Logger name="testlogger" level="TRACE" additivity="false">
        <AppenderRef ref="async"/>
    </Logger>

【问题讨论】:

【参考方案1】:

OnStartupTriggeringPolicy 本身不能触发“翻转”,除非新进程恰好具有与前一个进程相同的进程 ID。否则,它将导致使用新名称创建一个新文件,甚至不知道先前执行的文件是否存在。

我建议您为 Log4j 2 创建一个 Jira 问题以创建执行此操作的操作。

至于最多保留 5 个文件,2.5 版中的删除操作可以做到这一点 - 但前提是存在翻转,您的配置永远不会真正执行。

此外,我认为您没有特别好的理由在您的配置中使用路由附加程序。由于一个进程只能有一个 id,因此您永远不会拥有多个 RollingFileAppender。

【讨论】:

以上是关于带有路由附加程序的 Log4J2 不归档文件的主要内容,如果未能解决你的问题,请参考以下文章

Log4J2 - 在运行时分配文件附加程序文件名

log4j2按日期按级别的日志文件归档(每天一个文件)

log4j2 未找到 1 个记录器的附加程序

如何以编程方式在运行时添加 Log4J2 附加程序?

如何使用 Spring Boot 设置 log4j2 自定义附加程序?

Log4j2中RollingFile的文件滚动更新机制