在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中注册您的侦听器。

09-26 21:31
查看更多