如何正确关闭 Log4j,关闭所有 Appender,从而关闭文件

问题描述 投票:0回答:2

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

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

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

java servlets resources log4j
2个回答
19
投票

试试这个:

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

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


1
投票

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

首先,我必须从 servlet

LogManager.shutdown()
方法调用
destroy()

然后我必须修复我们自己的 Appender 实现的

close()
方法(它是
AppenderSkeleton
的子类),以便它正确地从
getAllAppenders()
关闭附加程序。

© www.soinside.com 2019 - 2024. All rights reserved.