commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Kitching <>
Subject log4j configuration in servlet-engine environment
Date Fri, 18 Mar 2005 10:57:25 GMT

I'm one of the committers for commons-logging and am looking into some
memory-related issues when code is run in a servlet-engine environment.

Imagine the following classloader structure (typical for a servlet
  [bootstrap classloader]
  [shared classloader]
  [classloader per webapp]

Commons-logging keeps configuration for each webapp separate by keeping
a Map of configurations, keyed by per-webapp classloader. This means
that config is separate regardless of whether the LogFactory class was
loaded via the shared classloader or the per-webapp classloader.

How is the same situation handled in log4j? If log4j.jar is deployed via
the shared classloader, then the individual webapps do *not* deploy
their own copy, but instead use the one present in the shared
classloader then what happens?

It seems to me that log4j searches for a config file *once only*: when
the LogManager class is loaded. This implies that in the above scenario
the individual webapps *must* deploy their own private copies of
log4j.jar if they want their own private logging configuration (and in
addition, the per-webapp classloader must use child-first classloading,
not parent-first). Have I understood correctly?

Note that I'm not recommending the use of a shared classloader; I think
requiring a separate copy is fine if this is the way log4j works, it's
just that the Tomcat docs seem to imply that the shared classloader
approach is the way to go, but I can't see it working.



To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message