logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lukas Vogel (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LOG4J2-1606) log4j-web deinitalizes the Logger too early if listeners defined in web.xml use it
Date Thu, 22 Sep 2016 13:18:21 GMT

    [ https://issues.apache.org/jira/browse/LOG4J2-1606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15513283#comment-15513283

Lukas Vogel commented on LOG4J2-1606:

I'm not sure I understand what you mean. The documentation says "You must not manually configure
the Log4jServletContextListener or Log4jServletFilter in your deployment descriptor (web.xml)
or in another initializer or listener in a Servlet 3.0 ..." and "... unless you disable auto-initialization
with isLog4jAutoInitializationDisabled" 

But I would like to have auto initialization and my own listeners. But as soon as I add listeners
to web.xml they will always get de-initialized (contextDestroyed) after the programmatically
added Log4jServletContextListener.

> 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

To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org

View raw message