Lukas Vogel created LOG4J2-1606:

             Summary: log4j-web deinitalizes the Logger too early if listeners 
defined in web.xml use it 
                 Key: LOG4J2-1606
             Project: Log4j 2
          Issue Type: Bug
          Components: Web/Servlet
    Affects Versions: 2.6.2
         Environment: Java8, Linux/Mac, Tomcat
            Reporter: Lukas Vogel

We use log4j in a Apache Tomcat environment.
In the web.xml file we define a custom ServerStartup listener that initializes 
the DB etc and logs both in contextInitialized and contextDestroyed.

If we use the log4j-web package the class Log4jServletContainerInitializer 
initializes the logger and adds a Log4jServletContextListener to the 
ServletContext. Since this listener is added after our listener the method 
Log4jServletContextListener#contextDestroyed is called before our listener's 
contextDestroyed method. Thus the Logger is de-initialized too early.

We could disable auto initialization and initialize the logger ourselves but 
then doing it in the listener is too late since the WebService-framework (Metro 
glassfish) initializes the webservice endpoints before the listener. Since we 
use static logger variables in those webservice classes this would trigger the 
message "StatusLogger no log4j configuration found..."  because the logger was 
not yet initialized.

One possible patch we see is that we make an option to manually add the 
In Log4jServletContainerInitializer we would put an "if (! Manually added)" 
around the  call "servletContext.addListener(new 
Log4jServletContextListener());" and then we could manually add it to the 
listeners in web.xml

If you have any other suggestions I would be glad to hear them.

This message was sent by Atlassian JIRA

To unsubscribe, e-mail:
For additional commands, e-mail:

Reply via email to