每当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>