我正在尝试为log4j2文件添加路由以记录名称中包含其进程ID的文件。这与路由和指定一些注入进程ID查找的代码一起使用。但是,这些文件似乎不再正确存档 - 每次启动该过程时,都会使用进程ID正确生成一个新文件,但是没有任何内容存放在Archive目录中。
此外,即使我没有使用路由,我也无法弄清楚如何保留归档中的5个文件,但只是使用带有OnstartupTriggeringPolicy的RollingFile appender。
<Routing name="Routing">
<Routes pattern="$${process:Id}">
<Route>
<RollingFile name="logFile"
fileName="${LOG_DIR}/erdaemon-${process:Id}.log"
filePattern="${ARCHIVE}/erdaemon.%d{yyyy-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>
答案 0 :(得分:1)
OnStartupTriggeringPolicy本身不能触发“翻转”,除非新进程恰好具有与前一进程相同的进程ID。否则,它将导致使用新名称创建新文件,甚至不知道存在来自先前执行的文件。
我建议你为Log4j 2创建一个Jira问题来创建一个动作来执行此操作。
至于最多保留5个文件,版本2.5中的删除操作可以执行此操作 - 但仅当存在翻转时,您的配置才会真正执行。
此外,我没有特别好的理由让您在配置中使用Routing Appender。由于一个进程只能有一个id,所以你永远不会有多个RollingFileAppender。