带有路由附加程序的 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 不归档文件的主要内容,如果未能解决你的问题,请参考以下文章