在Web应用程序中,我使用log4j。
我已经使用shutdown
挂钩终止日志管理器:
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run(){
LogManager.shutdown();
}
});
当tomcat关闭时,我在catalina.out中看到以下异常
这是什么意思?有什么问题,我该如何解决?
INFO: Illegal access: this web application instance has been stopped
already. Could not load org.apache.log4j.helpers.NullEnumeration.
The eventual following stack trace is caused by an error thrown for
debugging purposes as well as to attempt to terminate the thread which
caused the illegal access, and has no functional impact. Throwable
occurred: java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1587)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
at org.apache.log4j.Category.getAllAppenders(Category.java:413)
at org.apache.log4j.Category.closeNestedAppenders(Category.java:226)
at org.apache.log4j.Hierarchy.shutdown(Hierarchy.java:467)
at org.apache.log4j.LogManager.shutdown(LogManager.java:267)
at com.MyLog4jStarter$1.run(Log4JStarterListener.java:133) Exception in thread "Thread-11" java.lang.NoClassDefFoundError:
org.apache.log4j.helpers.NullEnumeration
at org.apache.log4j.Category.getAllAppenders(Category.java:413)
at org.apache.log4j.Category.closeNestedAppenders(Category.java:226)
at org.apache.log4j.Hierarchy.shutdown(Hierarchy.java:467)
at org.apache.log4j.LogManager.shutdown(LogManager.java:267)
at de.siemens.icn.hipath.dls.listeners.Log4JInitListener$1.run(Log4JInitListener.java:42)
Caused by: java.lang.ClassNotFoundException:
org.apache.log4j.helpers.NullEnumeration
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
最佳答案
出现异常的原因是某些类(例如NullEnumeration
)已被卸载。
向Web应用程序添加挂钩的正确方法是实现javax.servlet.ServletContextListener
并将此代码添加到contextDestroyed
方法。您还必须在web.xml
中注册您的侦听器。