我最近在我的 tomcat6 服务器上从 log4j 迁移到 log4j2。问题是我删除的滚动文件永远保持打开状态,因此磁盘空间没有被释放。
我使用此命令“sudo /usr/sbin/lsof | grep returned”来检查打开的已删除文件。我似乎不明白如何在不重新启动 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服务器,它仍然保持文件打开。
RandomAccessFileAppender 和 logrotate 存在一个已知问题:http://issues.apache.org/jira/browse/LOG4J2-354 http://issues.apache.org/jira/browse/LOG4J2-354; Log4j 团队建议使用 RollingRandomAccessFileAppender 代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)