log4j2编写的部分.gz文件

Partial .gz file written by log4j2

我有以下日志配置。

    <RollingRandomAccessFile name="RollingReqAppender"
        fileName="/usr/test/req.log"
        filePattern="/usr/test/req.log.%d{yyyy-MM-dd-HH}.%i.gz"
        immediateFlush="true" append="true">
        <PatternLayout>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS Z}%m%n</Pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicy size="500 MB"/>
            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        </Policies>
    </RollingRandomAccessFile>

当日志滚动时(基于时间或大小),它被 gzip 压缩。压缩文件需要一些时间(几秒到几分钟,具体取决于负载)。问题是该文件被 gzip 到位,并且在 gzip 时,部分 gzip 文件存储在与最终 gzip 文件同名的同一文件夹中。例如:/usr/test/req.log.2017-01-03-02.1.gz

这会给试图处理部分文件的文件使用者带来问题。我希望能够区分部分 gzip 文件和完整的 gzip 文件。例如,我想设置一个配置,当文件被 gzip 压缩时,它被写成一个不同的名称,例如:/usr/test/req.log.2017-01-03-02.1.temp.gz,一旦它被完全 gzip 压缩,名称将更改为最终名称 /usr/test/req.log.2017-01-03-02.1.gz

我怎样才能做到这一点?

Log4j2 目前的行为与您描述的不同。所以没有配置来实现这一点。

请在 Log4j2 JIRA 问题跟踪器上提出功能请求。实现这一点的最快方法是提供带有单元测试的补丁。

此功能已添加到 log4j2 版本 2.9.0 https://issues.apache.org/jira/browse/LOG4J2-1766