Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat上的Log4j日志旋转会泄漏已删除文件中的磁盘空间_Java_Tomcat_Logging_Log4j2 - Fatal编程技术网

Java tomcat上的Log4j日志旋转会泄漏已删除文件中的磁盘空间

Java tomcat上的Log4j日志旋转会泄漏已删除文件中的磁盘空间,java,tomcat,logging,log4j2,Java,Tomcat,Logging,Log4j2,每当log4j2的RollingFileAppender在我的web服务器上旋转日志文件时(在新的一天写入第一个条目时),可用磁盘空间就会大大减少 我在Tomcat7.0.55上使用log4j22.5 lsof显示数百个已删除的文件,这些文件无法释放,因为tomcat正在使用它们 例如,文件FOP.log被旋转为FOP.log.2016-04-13.gz,这显然效果很好,但现在 lsof -s | grep deleted | grep tomcat 显示270次文件FOP.log.2016-

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

我在Tomcat7.0.55上使用log4j22.5

lsof显示数百个已删除的文件,这些文件无法释放,因为tomcat正在使用它们

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

lsof -s | grep deleted | grep tomcat
显示270次文件FOP.log.2016-04-13(不带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>

...
%d{dd.MM.yyyy HH:MM:ss,SSS}%p%c-%m%n
...