代码之家  ›  专栏  ›  技术社区  ›  alamar

如何正确地记录4j,关闭所有附加器,从而关闭文件

  •  15
  • alamar  · 技术社区  · 17 年前

    我的基于servlet的web应用程序在重新部署时有时无法关闭Log4j日志文件,泄漏到文件描述符泄漏,有时导致包含servlet的日志文件因“打开的文件太多”而死亡。

    我有一个ContextListener,我应该在它的contextDestroyed()中放入什么来告诉log4j关闭并释放所有资源?

    快速浏览javadocs,发现了带有shutdown()方法的层次结构类。我不知道如何实际获取当前的层次结构,javadoc声明此类中没有用户可服务的组件:)

    2 回复  |  直到 17 年前
        1
  •  19
  •   kgiannakakis    17 年前

    试试这个:

    org.apache.log4j.LogManager.shutdown();
    

    但是,您遇到的问题很奇怪,不应该发生。您使用的是什么JVM、容器、log4j版本?

        2
  •  1
  •   Ulrik    15 年前

    我也有同样的问题,但我的解决方案需要两个步骤:

    首先,我必须打电话 LogManager.shutdown() 从一个servlet destroy() 方法

    然后,我不得不修理机器 close() 我们自己的Appender实现的方法(它是 AppenderSkeleton ),以便它正确地从 getAllAppenders() .