带路由appender的Log4J2不归档文件

时间:2016-04-15 20:39:07

标签: routing log4j2

我正在尝试为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>

1 个答案:

答案 0 :(得分:1)

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

我建议你为Log4j 2创建一个Jira问题来创建一个动作来执行此操作。

至于最多保留5个文件,版本2.5中的删除操作可以执行此操作 - 但仅当存在翻转时,您的配置才会真正执行。

此外,我没有特别好的理由让您在配置中使用Routing Appender。由于一个进程只能有一个id,所以你永远不会有多个RollingFileAppender。