Log4j2已滚动已删除的文件仍处于打开状态,并且未释放磁盘空间

时间:2015-01-09 07:35:11

标签: tomcat tomcat6 log4j2

我最近从我的tomcat6服务器上的log4j迁移到log4j2。问题是我删除的滚动文件将永远保持打开状态,因此磁盘空间不会被释放。 我使用此命令“sudo / usr / sbin / lsof | grep deleted”来检查打开的已删除文件。我似乎不明白如何在不重启tomcat服务器的情况下关闭这些文件。 cron作业正在删除其中一些日志。而其中很多都是通过logrotate删除的。

...

 <Appenders>
    <RollingRandomAccessFile name="requestAppender" fileName="${sys:catalina.home}/webapps/miscLogs/request.log"
                filePattern="${sys:catalina.home}/webapps/miscLogs/request.log.%i">
            <PatternLayout>
                <Pattern>
                    "%d{dd MMM yyyy HH:mm:ss } %-5p %c %x -%m%n"
                </Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="3400MB"/>
            </Policies>
            <DefaultRolloverStrategy max="3"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<logger additivity="false" name="requestLogger" level="debug">
            <AppenderRef ref="requestAppender"/>
        </logger>
</Loggers>

...

问题在于已经滚动的文件。在这种情况下,问题在于request.log.3。它被cron删除(没有logrotate),但它仍然没有放弃磁盘空间,并且由运行整个程序的tomcat服务器保持打开状态。

lsof的输出低于..

java 6393 root 160u REG 8,1 3565160049 5525509 /opt/tomcat/webapps/miscLogs/request.log.1(已删除)

这里的java进程是tomcat 6服务器,它仍然保持文件打开。

2 个答案:

答案 0 :(得分:0)

RandomAccessFileAppender和logrotate存在一个已知问题:http://issues.apache.org/jira/browse/LOG4J2-354; Log4j团队建议使用RollingRandomAccessFileAppender。

答案 1 :(得分:0)

DefaultRollOverStrategy:
      max: 3
      Delete:
        basePath: "${sys:logDir}/archive"
        IfLastModified:
          age: "5d"