如何正确Log4j,关闭所有追加器,从而关闭文件

2022-09-03 13:59:17

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

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

快速浏览javadocs显示了带有s shutdown()方法的Hierachery类。我不知道如何实际获取当前的Hierachery,javadoc指出这个类在:)


答案 1

试试这个:

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

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


答案 2

我遇到了同样的问题,但我的解决方案需要两个步骤:

首先,我必须从 servlets 方法调用。LogManager.shutdown()destroy()

然后,我必须修复我们自己的 Appender 实现的方法(它是 的子类),以便它正确地关闭 。close()AppenderSkeletongetAllAppenders()


推荐