[ https://issues.apache.org/jira/browse/LOG4J2-1606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16265137#comment-16265137 ]
Pavel Erofeev commented on LOG4J2-1606: --------------------------------------- [~rtur...@e-djuster.com] Well I made the loggers non-static fields and created them in contextInitialized. It doesn't look nice, but as long as ServletContextListener-s are singletons anyway, and contextInitialized is called exactly once, it's OK. Another point, I'm relying on the fact that no other classes (servlets, filters, ... - they use traditional static loggers) are loaded before the context listeners are called. I'm not sure if it's defined in the servlet spec, but at least Tomcat 7 works this way. Again, not future proof, but acceptable as a workaround. Once I have a bit more free time I could dig deeper, but now I have to move forward. > log4j-web deinitalizes the Logger too early if listeners defined in web.xml > use it > ----------------------------------------------------------------------------------- > > Key: LOG4J2-1606 > URL: https://issues.apache.org/jira/browse/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 > Log4jServletContextListener: > 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 (v6.4.14#64029)