The PARENT_LAST setting did the trick, thanks!

--Erik
-----Original Message-----
From: Ostermueller, Erik 
Sent: Friday, January 19, 2007 2:37 PM
To: 'Log4J Users List'
Subject: RE: Missing loggers from getCurrentLoggers() under WAS 5.x

Jake, thanks for your lengthy reply.


>> One way to solve the multiple classloader issue is to make sure 
>> child-first classloading is disabled for any individual app
The pdf I referenced suggested the PARENT_LAST setting -- PARENT_FIRST
is the default.
Looking back at my settings, for some reason when I set it to
PARENT_LAST, it didn't 'take'.
I'll try that again today.

>>(or, at least, make sure log4j.jar is not deployed in WEB-INF/lib)
Since both our war and mdb use log4j, we keep log4j.jar in the ear.


>>  and put a copy of log4j.jar in the server's classpath so that all
apps see it.  
>> Now you have a single default logger repository to query and JMX
should find all the loggers.
If the PARENT_LAST thing doesn't work, I'll try this.

Thanks again,

--Erik

-----Original Message-----
From: Jacob Kjome [mailto:[EMAIL PROTECTED]
Sent: Friday, January 19, 2007 11:07 AM
To: Log4J Users List
Subject: Re: Missing loggers from getCurrentLoggers() under WAS 5.x


Does Jonas use something similar to the JBoss Unified Classloader?  I
don't fully understand the Unified Classloader, but from what I've
gathered, it seems as if libraries, no matter where they are loaded
from, are all part of one uber-classloader.  If this is true, and Jonas
uses something like this, then only one Log4j library would be loaded
across the entire server.  Even if individual app deploy Log4j in their
WEB-INF/lib, each would continue to use the Log4j library first loaded
by the Unified Classloader.  Because there is only one instance of Log4j
to use, there is only one LoggerRepository (unless someone has installed
a custom repository selector).  So, it would be a one-stop-shop for JMX
under Jonas (or JBoss).  Again, this is all premised on my presumption
of Jonas using a Unified Classloader and my further presumption of the
behavior of a Unified Classloader.

Now, if all the above holds true and Websphere uses multiple
classloaders, it may have multiple instances of the Log4j library being
used by different applications.  Even if no repository selector was set,
there would be separate logger repositories; each being the default
logger repository of each instance of Log4j in distinct classloaders
that can't see each other.

One way to solve the multiple classloader issue is to make sure
child-first classloading is disabled for any individual app (or, at
least, make sure log4j.jar is not deployed in WEB-INF/lib) and put a
copy of log4j.jar in the server's classpath so that all apps see it.
Now you have a single default logger repository to query and JMX should
find all the loggers.

Of course the problem with the latter solution is that all apps have to
use the same logger repository and, thus, the same configuration.  This
can be remedied by using a custom repository selector based on something
like JNDI or classloaders (be *****very******* careful about using the
latter. It can result in all sorts of classloading issues).  Of course
then your JMX tool will need to know how to get a handle to all logger
repositories managed by the custom repository selector in order to
centrally configure loggers for all apps instead of just libraries using
the default logger repository.

Anyway, just throwing that out there for contemplation.  I've used
neither Websphere nor Jonas (though I would like to try out the latter
sometime), so take all I've said with a grain of salt.


Jake

For the JMX stuff to work, wouldn't Log4j have to be in the server's

Quoting "Ostermueller, Erik" <[EMAIL PROTECTED]>:

>
>
> Hello,
>
> I'm writing some code that will turn log4j(1.2.8) logging on and off 
> at runtime.  I'll probably expose this via jmx.
> I've seen solutions out there to re-read a configuration file and this

> is not what I want to do.
>
> Instead, I want the code to discover all the loggers in use by my EAR 
> (deployed under WAS 5.x ) and enable the JMX user to:
>
> -view the list of all loggers
> -set the logging levels on any one of the loggers.
>
> Under jonas, this works like a dream.
> Invoking myLogger.getLoggerRepository().getCurrentLoggers() unleashes 
> a gusher of loggers of every variety.
> hibernate, struts, betwixt, etc...
> I can pick over the results and invoke setLevel() on the ones I care 
> about.
> Logging levels are jumping up and down and the world is a happy place.
> Enter WebSphere Application Server 5.x [thunder, lightning, dark 
> clouds].
>
> With WAS, the getCurrentLoggers() returns just a small subset of all 
> the loggers in use.
> The ones I mentioned above, for instance, are ones that show up in 
> jonas but not websphere.
> The ones in my own package space are there in both jonas and
websphere.
> So why did some disappear and not others?  Where did they all go?  -- 
> we use struts and the others equally in both jonas and was.
>
> Using the following WAS add-on (a classloader viewer), I'm probably 
> going to find my missing loggers.
>
>
http://ecommunity.groupintelligence.com/websphere/forums/showthread.php?
> p=2353#post2353
>
> My question is, what should I do next if I do find them?
> I suppose I'll try to find an api to traverse the classloaders, but 
> that sounds plain nasty.
> Surely someone has done this before.....
>
> I've posted this question on a WebSphere forum and I didn't get as 
> much as a peep out of them.
>
http://ecommunity.groupintelligence.com/websphere/forums/showthread.php?
> p=2353#post2353
>
> The people who wrote the following doc seem to know what they're 
> talking
> about:
> http://mattfleming.com/files/active/0/ibm.pdf
>
> I tried their "JCL option 3 + EAR" and unfortunately, the hibernate 
> and other loggers were still missing.
>
> If anyone thinks it will help, I could post the lists of loggers that 
> did/didn't show up.
>
> Thanks all,
>
>
> --Erik Ostermueller
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to