[ 
https://issues.apache.org/jira/browse/LOG4J2-2065?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bill Okara updated LOG4J2-2065:
-------------------------------
    Attachment: log4j-test.tar.gz

Attached a simple test project for reproducing the issue. 
Steps to reproduce:
1) build the maven project
2) copy the CommonLib.jar to tomcat/lib (also put log4j-api.jar and 
log4j-core.jar there)
3) copy the WebApp1.war to tomcat/webapps
4) start tomcat, should see similar log4j2 debug output as mentioned in 
description.

> Wrong classLoader used to create loggerContext for container shared lib
> -----------------------------------------------------------------------
>
>                 Key: LOG4J2-2065
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2065
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.9.1
>            Reporter: Bill Okara
>         Attachments: log4j-test.tar.gz
>
>
> Tested with log4j2 v2.9.1, tomcat 7 latest on linux 
> When multiple webapps, say webapp1 and webapp2, use a shared apache lib (say 
> commonLib, which also uses log4j logging) that deployed as jndi resource in 
> tomcat (thus was put in tomcat/lib) with the following deployment structure:
> tomcat/lib:
> - log4j-core.jar, log4j-api.jar
> - commonLib.jar
> - log4j2.xml
> webapp1 and webapp2, in /WEB-INF:
> - classes/log4j2.xml
> - lib/log4j2-web.jar
> When loading, the ClassLoaderContextSelector correctly uses the 
> webappClassloader to load the log4j config for webapp1 and webapp2. But for 
> the commonLib loggerContext, depending on which webapp got loaded first, the 
> commonLib loggerContext will either be using 
> webapp1/WEB-INF/classes/log4j2.xml
> or 
> webapp2/WEB-INF/classes/log4j2.xml
> instead of the log4j2.xml provided in tomcat/lib.
> Followings are the debug log output for reference:
> {{
> DEBUG StatusLogger Log4jServletContainerInitializer starting up Log4j in 
> Servlet 3.0+ environment.
> DEBUG StatusLogger Using ShutdownCallbackRegistry class 
> org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry
> DEBUG StatusLogger Using the servlet context name "webapp1".
> DEBUG StatusLogger getConfigURI found [classpath:log4j2.xml] in 
> servletContext at [classpath:log4j2.xml]
> DEBUG StatusLogger Took 0.119686 seconds to load 204 plugins from 
> WebappClassLoader
> context: /webapp1
> delegate: false
> repositories:
> /WEB-INF/classes/
> ----------> Parent Classloader:
> java.net.URLClassLoader@6dde5c8c
> ..
> DEBUG StatusLogger Starting LoggerContext[name=webapp1] from configuration at 
> classpath:log4j2.xml
> ..
> // then after initialized some of the code that referenced the commonLib 
> classes
> DEBUG StatusLogger Starting LoggerContext[name=6dde5c8c, 
> org.apache.logging.log4j.core.LoggerContext@3240b374]...
> DEBUG StatusLogger Reconfiguration started for context[name=6dde5c8c] at URI 
> null (org.apache.logging.log4j.core.LoggerContext@3240b374) with optional 
> ClassLoader: null
> DEBUG StatusLogger Using configurationFactory 
> org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@5b34ed62
> TRACE StatusLogger Trying to find [log4j2-test6dde5c8c.properties] using 
> context class loader WebappClassLoader
> context: /webapp1
> delegate: false
> repositories:
> /WEB-INF/classes/
> ----------> Parent Classloader:
> java.net.URLClassLoader@6dde5c8c
> ..
> TRACE StatusLogger Trying to find [log4j2.jsn] using 
> ClassLoader.getSystemResource().
> TRACE StatusLogger Trying to find [log4j2.xml] using context class loader 
> WebappClassLoader
> context: /webapp1
> delegate: false
> repositories:
> /WEB-INF/classes/
> ----------> Parent Classloader:
> java.net.URLClassLoader@6dde5c8c
> }}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to