[ 
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)

Reply via email to