logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jacob Kjome" <h...@visi.com>
Subject Re: Standalone instance with multiple log4j setting
Date Wed, 31 Mar 2010 16:49:54 GMT
For applications deployed as EAR files, you can't expect a webapp's 
WEB-INF/lib/log4j.jar to be picked up by EJB's deployed outside that webapp.  
In that case, you'd need to place it in some common upper level (not at all in 
WEB-INF/lib) where both the webapp and EJB can see it.  Of course, unless you 
have a server that allows you to manage the classloading behavior of an EAR 
file (i.e., set parent-last on the EAR as a whole), not just a WAR file, then 
you can't depend on classloading.

This is where logger repository selectors come in.  You can have a global 
log4j.jar file (i.e. in the server's global classpath) and still separate 
logger repositories.  You just need to use some environmental value as the key 
to the logger repositories in the selector, such as thread, classloader, or 
JNDI.  I think you might benefit from the latter.  One already exists in the 
log4j-sandbox tagged as Alpha3.  See the article I pointed to in my previous 
response for details.

There are caveats and you may find that shared libraries using statically 
defined loggers (e.g., 'static final Logger logger = 
Logger.getLogger("MyLoggerName")') end up logging to a different logger 
repository than you expected.  This occurs because the logger is only looked 
up once, so the logger repository used will be the first one looked up.  If 
one webapp looks it up first, it's logger repository will be used for the life 
of the library (i.e., until server restart).  Other apps using the library 
will have that library's logs going to the first application's logger 

I know of no good way around this that I know of.  Maybe Ceki has come up with 
a better way over the years in his work with Logback?  You might ask on that 
mailing list.


On Wed, 31 Mar 2010 10:35:23 +0800
  WM YEOH <spinergywmy@gmail.com> wrote:
> Hi Jake,
>   Thank you for the article.
>   I tried to put the log4j jar under application classloader level as well
> as war WEB-INF/lib, and set the delegate to false in sun-web.xml, and that
> works fine. However, I got class not found exception when came across EJB
> classes. I even specified the log4j jar in manifest file but no luck.
>   I couldn't find any useful information how to configure sun apps to load
> parent-last. I am wondering is it no other way to have EJB classes reference
> log4j? Appreciate if you can again point me to the right direction.
>   Thank you.
> Regards,
> Wooi Meng
> On Mon, Mar 29, 2010 at 10:57 PM, Jacob Kjome <hoju@visi.com> wrote:
>> Research Logger Repository Selectors.  Here's a resource to get you
>> started....
>> http://wiki.apache.org/logging-log4j/AppContainerLogging
>> Jake
>> On Mon, 29 Mar 2010 17:51:56 +0800
>>  WM YEOH <spinergywmy@gmail.com> wrote:
>>> Hi there,
>>> Current setup,
>>> - App server - Sun Java System Application Server 9.1_01
>>> - deploy one ear(own war) and another war applications in the same stand
>>> alone instance
>>> I have setup in a way that each application has its own log4j.xml but
>>> assign
>>> to different log files, for instance, log4jA.xml -> A.log and log4jB.xml
>>> ->
>>> B.log. However, the debug message only written into one log file instead
>>> of
>>> its designated log file. I could not package the log4j jar into the war as
>>> other classes in separate jar (within ear) used logger. Therefore, I have
>>> to
>>> specified log4j jar in the server classpath. Which I believed that would
>>> be
>>> the issue that causing the debug message not written to the correct log
>>> file.
>>> I am wondering is there any settings to solve the problem that I faced. Or
>>> is there any alternatives to solve the problem.
>>> Appreciate anyone help me to solve the problem as soon as possible. Please
>>> let me know if you need further information.
>>> Thank you.
>>> Regards
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org

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

View raw message