【问题标题】:Log4j2 rolling leaves file handles openLog4j2 滚动叶文件句柄打开
【发布时间】:2015-01-30 12:25:46
【问题描述】:

当 Log4j2 滚动我的日志文件时,它会使其中一些文件保持打开状态,我可以在 lsof 中看到:

java 6684 root 609u REG 8,3 5791 142217 /jboss/server/all/log/info.log.2015-01-30 12:48-2.log(已删除) java 6684 root 613r REG 8,3 2917 140533 /jboss/server/all/log/info.log.2015-01-30 12:45-1.log(已删除) java 6684 root 621u REG 8,3 78090 140536 /jboss/server/all/log/service.manager.log.2015-01-30 12:46-1.log(已删除) java 6684 root 622u REG 8,3 309 140541 /jboss/server/all/log/info.log.2015-01-30 12:46-1.log(已删除) java 6684 root 623u REG 8,3 309 140539 /jboss/server/all/log/node.log.2015-01-30 12:46-1.log(已删除) java 6684 root 644r REG 8,3 126606 140228 /jboss/server/all/log/info.log.2015-01-30 12:44-1.log(已删除) java 6684 root 648r REG 8,3 70026 135612 /jboss/server/all/log/node.log.2015-01-30 12:44-1.log(已删除) java 6684 root 649r REG 8,3 126606 140202 /jboss/server/all/log/service.manager.log.2015-01-30 12:44-1.log(已删除) java 6684 root 652r REG 8,3 2917 140530 /jboss/server/all/log/node.log.2015-01-30 12:45-1.log(已删除) java 6684 root 653r REG 8,3 113366 140526 /jboss/server/all/log/service.manager.log.2015-01-30 12:45-1.log(已删除) java 6684 root 654u REG 8,3 322 140543 /jboss/server/all/log/service.manager.log.2015-01-30 12:47-1.log(已删除)

这是我的配置文件之一:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
    <Appenders>
        <RollingRandomAccessFile name="PCI" fileName="${sys:jboss.server.home.dir}}/log/mycast.pci.log"
                     filePattern="${sys:jboss.server.home.dir}}/log/mycast.pci.log.%d{yyyy-MM-dd HH:mm}-%i.log.gz">
            <param name="Threshold" value="trace" />
            <PatternLayout>
                <Pattern>%d %-5p [%c{1}] (%t) {%x}: %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="32 MB"/>
            </Policies>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="com.abc" level="trace">
            <AppenderRef ref="PCI" />
        </Logger>
    </Loggers>
</Configuration>

我按照Log4j2 Rolled Files that are deleted are still open and disk space not freed 中的建议尝试了 RollingRandomAccessFileAppender,但我得到了:

RollingRandomAccessFileAppender: CLASS_NOT_FOUND

有没有办法告诉 Log4j2 在滚动之前或一段时间不使用之后关闭文件?我应该使用其他滚筒吗?

谢谢

【问题讨论】:

  • RollingFile appender 有同样的问题吗?这可能是另一种选择。
  • 是的,我试过了,RollingFile 也让它们保持打开状态。

标签: java log4j log4j2


【解决方案1】:

这看起来很奇怪:路径似乎不完全匹配:

/jboss/server/all/log/info.log.2015-01-30 12:48-2.log(已删除)

fileName="${sys:jboss.server.home.dir}}/log/mycast.pci.log" filePattern="${sys:jboss.server.home.dir}}/log/mycast.pci.log.%d{yyyy-MM-dd HH:mm}-%i.log.gz">

翻转路径有一个日期,但以“.gz”结尾,其中打开的文件句柄不以“.gz”结尾。

您是否尝试过删除 filePattern 中的空间?

【讨论】:

  • 我有多个 log4j2 配置文件,我粘贴了最短的一个,因此路径可能不匹配,但它们的工作方式相同。删除空间不起作用。打开的文件不以“.gz”结尾的原因是(我认为)日志文件是在滚动之前打开的,所以 log4j2 保持它的句柄打开,当它被重命名时它被认为是已删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多