我最近从我的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服务器,它仍然保持文件打开。
答案 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"