Tomcat 已删除的Log4j2卷文件仍处于打开状态,磁盘空间未释放

Tomcat 已删除的Log4j2卷文件仍处于打开状态,磁盘空间未释放,tomcat,tomcat6,log4j2,Tomcat,Tomcat6,Log4j2,我最近在tomcat6服务器上从log4j迁移到log4j2。问题是,被删除的滚动文件将永远保持打开状态,因此磁盘空间不会被释放。 我使用这个命令“sudo/usr/sbin/lsof | grep deleted”来检查打开的删除文件。我似乎不明白如何在不重新启动tomcat服务器的情况下关闭这些文件。其中一些日志正在被cron作业删除。而其中很多都是通过logrotate删除的 %d{dd MMM yyyy HH:mm:ss}%-5p%c%x-%m%n 问题在于已经滚动的文件。在本例

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


%d{dd MMM yyyy HH:mm:ss}%-5p%c%x-%m%n

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

lsof的输出如下

java 6393根160u注册表8,1 3565160049 5525509/opt/tomcat/webapps/miscLogs/request.log.1(已删除)


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

RandomAccessFileAppender和logrotate存在一个已知问题:;Log4j团队建议改用RollingAndomaccessFileAppender。

什么是“滚动已删除的文件”?Log4j目前没有用于已滚动文件的删除功能。我检查了源代码,但log4j正在关闭流(RollingFileManager第171行)…请提供更多详细信息。如何删除日志文件?通过cron?Logrotate?请出示准确的命令。另外,请提供您的log4j2.xml配置。您正在使用RandomAccessFileAppender吗?其中一些日志正在被cron作业删除。而其中很多都是通过logrotate删除的。RandomAccessFileAppender和logrotate存在一个已知的问题:;更好地使用RollingHandomAccessFileAppender…即使我手动删除一个滚动文件,磁盘空间仍然没有释放,并且显示为一个打开的已删除文件。嘿,文件保持打开状态似乎仍然有问题。我正在共享xml配置。您是否关闭了logrotate?是的,我最终关闭了。现在旋转仅由log4j完成。但是一些滚动日志正在被cron作业删除。那些被删除的日志的一部分仍然被tomcat服务器打开。虽然这个代码片段可以解决这个问题,但确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
DefaultRollOverStrategy:
      max: 3
      Delete:
        basePath: "${sys:logDir}/archive"
        IfLastModified:
          age: "5d"
DefaultRollOverStrategy:
      max: 3
      Delete:
        basePath: "${sys:logDir}/archive"
        IfLastModified:
          age: "5d"