You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@logging.apache.org by "Markos, Alazar A" <al...@delta.com.INVALID> on 2022/03/02 17:11:48 UTC

WAR class loader policy issue with Log4j2 migration

When working with applications which have multiple jars/packages, logging stops after upgrading to Log4j 2.17.1. Only the main package where the app is initialized is logging.  It seems to be a class loader issue. To resolve this, we had to go into the deployed jar in websphere and change WAR class loader policy to single class loader for application. After that, we could see all the logs from all the jars. Is there a workaround to this issue? It seems to be consistent across multiple applications. Some feedback would really help, thanks!


Alazar Markos

Delta Air Lines

Associate IT Developer

678-614-0234

alazar.markos@delta.com<ma...@delta.com>

[cid:47a3ad1b-8b1a-4d17-924d-cd1991115a9e]

Re: WAR class loader policy issue with Log4j2 migration

Posted by Ralph Goers <ra...@dslextreme.com>.
I am really not all that clear on what your setup is. A typical Tomcat setup would have a ClassLoader for Tomcat and a ClassLoader for each web application. These web applications each have multiple jars & packages and work fine. 

I am not clear what the “main package” is. When you say “single class loader per application” what does it do when it isn’t in that mode? 

Log4j 2 uses ContextSelectors to locate the LoggerContext. The default in Log4j 2 is the ClassLoaderContextSelector, which works nicely with Tomcat as each ClassLoader will have its own LoggerContext (and thus, its own configuration).  You can look at https://logging.apache.org/log4j/2.x/manual/extending.html#ContextSelector <https://logging.apache.org/log4j/2.x/manual/extending.html#ContextSelector> for the other options that are available. If Websphere needs something else it is possible a new ContextSelector could be created but we would either need the requirements for how it should work or a PR. The ContextSelector used is controlled via the createContextSelector method in Log4jContextFactory.

Ralph

> On Mar 2, 2022, at 10:11 AM, Markos, Alazar A <al...@delta.com.INVALID> wrote:
> 
> When working with applications which have multiple jars/packages, logging stops after upgrading to Log4j 2.17.1. Only the main package where the app is initialized is logging.  It seems to be a class loader issue. To resolve this, we had to go into the deployed jar in websphere and change WAR class loader policy to single class loader for application. After that, we could see all the logs from all the jars. Is there a workaround to this issue? It seems to be consistent across multiple applications. Some feedback would really help, thanks!
> 
> Alazar Markos
> Delta Air Lines
> Associate IT Developer 
> 678-614-0234
> alazar.markos@delta.com <ma...@delta.com>