tomcat上的Log4j日志轮换会泄漏已删除文件中的磁盘空间

时间:2016-04-14 13:08:49

标签: java tomcat logging log4j2

每当log4j2的 RollingFileAppender 在我的Web服务器上旋转日志文件时(当新的一天写入第一个条目时),可用磁盘空间会大大缩小。

我在tomcat 7.0.55上使用log4j2 2.5。

lsof 显示了数百个已删除的文件,由于tomcat正在使用这些文件,因此无法释放这些文件。

例如, FOP.log 文件被轮换为 FOP.log.2016-04-13.gz ,这显然效果很好,但现在

lsof -s | grep deleted | grep tomcat

显示文件 FOP.log.2016-04-13 的270倍(没有gz后缀)。这些未删除的文件占用了几GB的磁盘空间。

一旦我停止tomcat,这些文件就消失了,但是在工作时间重启tomcat不是一种选择。

由于文件名是中间未压缩日志的名称,我认为压缩旋转文件时出现问题。第二个问题是一遍又一遍地复制该文件。

有没有办法防止此文件句柄泄漏?

以下是我的log4j2.xml的摘录:

<Configuration>
    <Appenders>
        ...
        <RollingFile name="FOPLogger" fileName="${sys:catalina.home}/logs/FOP.log" filePattern="${sys:catalina.home}/logs/FOP.log.%d{yyyy-MM-dd}.%i.gz">
            <PatternLayout>
                <Pattern>%d{dd.MM.yyyy HH:mm:ss,SSS} %p %c - %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingFile>
        ...
    </Appenders>
</Configuration>

0 个答案:

没有答案