Re: Web apps vs. Logging vs. Tomcat

2005-03-19 Thread Remy Maucherat
Jess Holle wrote:
Jess Holle wrote:
Okay, I did a bit more digging.
*If*:
   * Your web app contains log4j.jar *and* commons-logging.jar.
   * You do not have log4j installed in any of Tomcat's own lib
 directories.
   * You use a JNDI or other contextual classloader based
 LogRepositorySelector.
*Then*:
   * The first Tomcat web application will steal loggers from the
 Tomcat base, i.e. any that happen to be obtained while the first
 web app's contextual classloader is active.
 o In a brief, simple test, whichever web app receives the
   first JSP page request will steal the following Tomcat
   loggers:
   + org.apache.jasper.compiler.Compiler
   + org.apache.jasper.compiler.JspReader
   + org.apache.jasper.runtime.PageContextImpl
   + org.apache.jasper.servlet.JspServletWrapper
   + org.apache.jasper.xmlparser.ParserUtils
   * By steal, I mean that these loggers end up in the
 LoggerRepository of the given web app. Their configuration is thus
 controlled by it.  Also, they use the log4j library from the given
 web app.
There's nothing unexpected here: Jasper is a regular servlet, and thus 
all of its classes will be loaded with the webapp's classloader. It's 
basically like if you had the Jasper JARs inside /WEB-INF/lib. The 
problem then is that Jasper uses static logger instances, while it 
should either log to the servlet context or have per instance loggers, 
as it resides in a classloader shared across webapps. Regardless of what 
happens, we will need to cleanup Jasper's logging behavior.

Another completely different strategy for acquiring loggers is to use 
the CL which loaded the class (ie, to use straight delegation). There's 
the problem that it could cause classcast exceptions, however, and it's 
more annoying to configure.

Both solutions behave differently, but they have their own merits. I 
happen to prefer the context classloader oriented one in a J2EE 
environment (so it was used for the java.util.logging implementation I 
added recently based on some user submitted code that I heavily modfied 
- see http://issues.apache.org/bugzilla/show_bug.cgi?id=33143).

I could always be mistaken, but my examination of the LoggerRepository's 
involved seems pretty conclusive.

If one has to have log4j and commons-logging in one's web app, then the 
only solution appears to be to put log4j in Tomcat and use a 
non-contextual classloader based LogRepositorySelector.  Avoiding the 
contextual classloader based LogRepositorySelector only keeps Tomcats 
loggers from sharing the web app's intended LoggerRepository -- they 
still use the web app's log4j and its default LoggerRepository.
Rémy
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Web apps vs. Logging vs. Tomcat

2005-03-19 Thread Jess Holle
Remy Maucherat wrote:
Jess Holle wrote:
Jess Holle wrote:
Okay, I did a bit more digging.
*If*:
   * Your web app contains log4j.jar *and* commons-logging.jar.
   * You do not have log4j installed in any of Tomcat's own lib
 directories.
   * You use a JNDI or other contextual classloader based
 LogRepositorySelector.
*Then*:
   * The first Tomcat web application will steal loggers from the
 Tomcat base, i.e. any that happen to be obtained while the first
 web app's contextual classloader is active.
 o In a brief, simple test, whichever web app receives the
   first JSP page request will steal the following Tomcat
   loggers:
   + org.apache.jasper.compiler.Compiler
   + org.apache.jasper.compiler.JspReader
   + org.apache.jasper.runtime.PageContextImpl
   + org.apache.jasper.servlet.JspServletWrapper
   + org.apache.jasper.xmlparser.ParserUtils
   * By steal, I mean that these loggers end up in the
 LoggerRepository of the given web app. Their configuration is thus
 controlled by it.  Also, they use the log4j library from the given
 web app.
There's nothing unexpected here: Jasper is a regular servlet, and thus 
all of its classes will be loaded with the webapp's classloader. It's 
basically like if you had the Jasper JARs inside /WEB-INF/lib. The 
problem then is that Jasper uses static logger instances, while it 
should either log to the servlet context or have per instance loggers, 
as it resides in a classloader shared across webapps. Regardless of 
what happens, we will need to cleanup Jasper's logging behavior.
What's unexpected here is as you say that these loggers are static -- or 
in any event not per-web-app.  Otherwise, this behavior would be fine 
and good!

Another completely different strategy for acquiring loggers is to use 
the CL which loaded the class (ie, to use straight delegation). 
There's the problem that it could cause classcast exceptions, however, 
and it's more annoying to configure.

Both solutions behave differently, but they have their own merits. I 
happen to prefer the context classloader oriented one in a J2EE 
environment (so it was used for the java.util.logging implementation I 
added recently based on some user submitted code that I heavily 
modfied - see http://issues.apache.org/bugzilla/show_bug.cgi?id=33143).
Yes, I now have both approaches coded and as you say both have their 
merits.  If the instances wherein Tomcat loggers configured/obtained 
from one web app are used across web apps are eliminated in Tomcat 
5.5.x, then I could happily use the JNDI/J2EE approach and all Tomcat's 
own loggers for each web app would use that web app's configuration.  
Otherwise I really have to go with the straight delegation approach to 
prevent cross-web-app logger effects.

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-19 Thread Remy Maucherat
Jess Holle wrote:
Remy Maucherat wrote:
What's unexpected here is as you say that these loggers are static -- or 
in any event not per-web-app.  Otherwise, this behavior would be fine 
and good!
Yes, I forgot about Jasper when I added the container loggers in 5.5 :(
At first when we added commons-logging support, we added static loggers 
everywhere, since it was very easy this way.

Example from the main JSP servlet class:
private static Log log = LogFactory.getLog(JspServlet.class);
So since Jasper is in the common classloader, the class definition will 
be loaded only once, and the loggers used by Jasper will be associated 
with the first webapp which is loaded. It's a bit random, since some 
classes (ex: the compiler) may be loaded a bit later by other webapps.
- configuration nightmare

I also added fixes recently so that loggers are not accessed too early, 
which was a similar issue (some loggers would be have be improperly 
associated with the container classloader). There's lots of tweaking 
needed with logging overall, it's sort of to be expected.

Here, I suppose modifying all the loggers to be like this:
private Log log = LogFactory.getLog(JspServlet.class);
would fix the issue without further problems.
Another completely different strategy for acquiring loggers is to use 
the CL which loaded the class (ie, to use straight delegation). 
There's the problem that it could cause classcast exceptions, however, 
and it's more annoying to configure.

Both solutions behave differently, but they have their own merits. I 
happen to prefer the context classloader oriented one in a J2EE 
environment (so it was used for the java.util.logging implementation I 
added recently based on some user submitted code that I heavily 
modfied - see http://issues.apache.org/bugzilla/show_bug.cgi?id=33143).
Yes, I now have both approaches coded and as you say both have their 
merits.  If the instances wherein Tomcat loggers configured/obtained 
from one web app are used across web apps are eliminated in Tomcat 
5.5.x, then I could happily use the JNDI/J2EE approach and all Tomcat's 
own loggers for each web app would use that web app's configuration.  
Otherwise I really have to go with the straight delegation approach to 
prevent cross-web-app logger effects.
It's not the official J2EE way (there's no official J2EE way, as the 
default java.util.logging implementation is one global namespace 
unsuitable for containers), but it's similar to JNDI handling.

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-19 Thread Jess Holle
Remy Maucherat wrote:
I also added fixes recently so that loggers are not accessed too 
early, which was a similar issue (some loggers would be have be 
improperly associated with the container classloader). There's lots of 
tweaking needed with logging overall, it's sort of to be expected.
I'll have to check out the latest 5.5 as that's basically the other 
problem I was seeing.  Tomcat using my log4j and my log4j.properties, 
but was doing so before my first ServletContextListener was called, so I 
had not had a chance to install my LoggerRepositorySelector.  Thus these 
loggers were in my web app but not using the LoggerRepository I 
designated for my web app...

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-19 Thread Jess Holle
Remy Maucherat wrote:
Here, I suppose modifying all the loggers to be like this:
private Log log = LogFactory.getLog(JspServlet.class);
would fix the issue without further problems.
Hmm...  Any chance of such a fix in the next few months.  I can search 
out such and suggest patches, but I'm quite sure you have a far greater 
degree of familiarity with the details -- I just saw the configuration 
nightmare as you aptly put it.

It's not the official J2EE way (there's no official J2EE way, as the 
default java.util.logging implementation is one global namespace 
unsuitable for containers), but it's similar to JNDI handling.
Understood.  I've already got reasonable JNDI-based approach -- assuming 
the static loggers are to be cleaned up any time in the near future.

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-18 Thread Remy Maucherat
Jess Holle wrote:
Remy Maucherat wrote:
Jess Holle wrote:
Why out of curiosity?  I don't have a pro-UGLI ax to grind here, but 
Commons-Logging's behavior in Tomcat is really undesirable as is.
It would be the same anyway: the loading configuration and the logger 
instances will be tied to the webapp classloader. It has to work this 
way. As I understand it, the thing that does not work for you right 
now is that Tomcat uses your webapp's logger namespace before your 
callbacks are called.
Yes.  The issue is really that Tomcat uses log4j out of my web app for 
loggers that are to be used outside my web app.  Not only is the library 
used out of my web app but so is the configuration -- meaning web app A 
gets core Tomcat log output from web apps B and C...

Yoav confirmed that the solution is to move log4j and a default 
configuration higher in the stack so that everything uses it.  This 
together with a per-web-app ClassLoader (but not contextual 
classloader!) based LoggerRepository will ensure each web app gets its 
own loggers and configuration files and Tomcat core gets its own.
Yes, the logging namespaces need to be separate. I was faced with the 
issue very recently when writing a log manager for java.util.logging 
which would have a separate logger namespace for each classloader.

Now if you're inside JBoss and it has pre-established log4j and 
configured it prior to Tomcat loading, then I don't see a problem 
with Commons Logging.  Standalone Tomcat's Commons Logging behavior 
vis-a-vis log4j would seem to be an issue, though.  The issues are 
especially bad and bizarre when log4j is used in a web app but Tomcat 
itself does not have log4j installed, but this is only part of the 
issue.
I don't see any real difference. There should be plenty of container 
listeners and stuff available to configure this.
(I see Bill just mentioned conf/tomcat5-mbeans.xml but I have no clue 
what it is)
The nice thing about this as I understand it is that it would allow me 
to set up my own MBeans for a Tomcat-level / app-wide log4j 
LoggerRepository.

You're right, though, as far as per-web-app MBeans and 
LoggerRepository's -- there are more than enough servlet listeners, etc, 
in the servlet spec to handle this.

BTW, JBoss (supposedly, I didn't check personally) uses 
commons-logging everywhere, and the logging implementation used is log4j.
That works since *everything* uses log4j.  The issue is with Tomcat is 
really one of *not* having log4j at the Tomcat level but having it in 
your web app.  This leads to:

   * whole crop of loggers using java.util.logging (fine, to be
 expected, and there are Java 5 MBeans -- albeit limited -- to
 interact with these)
   * a few core Tomcat loggers that are *not* by nature per web app
 loggers using the log4j jar and configuration of the first web app
 that uses the class enclosing them (e.g. the first web app to get
 a request!)
   * the web app's own classes using whatever you specify
It is the 2nd of these 3 bullet that is so disturbing to me.  I'd like 
to see these either have separate loggers for each web app, or behave 
like the rest the Tomcat loggers and cause a leak of data and references 
between web apps.  This -- and a reasonable set of MBeans to 
control/expose loggers seems quite doable with the approach Yoav and 
Bill laid out.  It's just unfortunate that the out-of-the-box behavior 
with web apps using log4j is so onerous.
The core loggers you talk about are probably the ones used for reporting 
your servlets/filters/etc loading errors. This seems webapp related to me.

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-18 Thread Jess Holle
Remy Maucherat wrote:
BTW, JBoss (supposedly, I didn't check personally) uses 
commons-logging everywhere, and the logging implementation used is 
log4j.
That works since *everything* uses log4j.  The issue is with Tomcat 
is really one of *not* having log4j at the Tomcat level but having it 
in your web app.  This leads to:

   * whole crop of loggers using java.util.logging (fine, to be
 expected, and there are Java 5 MBeans -- albeit limited -- to
 interact with these)
   * a few core Tomcat loggers that are *not* by nature per web app
 loggers using the log4j jar and configuration of the first web app
 that uses the class enclosing them (e.g. the first web app to get
 a request!)
   * the web app's own classes using whatever you specify
It is the 2nd of these 3 bullet that is so disturbing to me.  I'd 
like to see these either have separate loggers for each web app, or 
behave like the rest the Tomcat loggers and cause a leak of data and 
references between web apps.  This -- and a reasonable set of MBeans 
to control/expose loggers seems quite doable with the approach Yoav 
and Bill laid out.  It's just unfortunate that the out-of-the-box 
behavior with web apps using log4j is so onerous.
The core loggers you talk about are probably the ones used for 
reporting your servlets/filters/etc loading errors. This seems webapp 
related to me.
Considering the classes containing these loggers are not per web app as 
best I can tell I don't believe the loggers are, but I guess more 
thorough debugging on my part is in order.  Perhaps I am mistaken and 
these are Tomcat loggers, but are specific to my web app.

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-18 Thread Jess Holle
Jess Holle wrote:
Remy Maucherat wrote:
BTW, JBoss (supposedly, I didn't check personally) uses 
commons-logging everywhere, and the logging implementation used is 
log4j.
That works since *everything* uses log4j.  The issue is with Tomcat 
is really one of *not* having log4j at the Tomcat level but having 
it in your web app.  This leads to:

   * whole crop of loggers using java.util.logging (fine, to be
 expected, and there are Java 5 MBeans -- albeit limited -- to
 interact with these)
   * a few core Tomcat loggers that are *not* by nature per web app
 loggers using the log4j jar and configuration of the first web app
 that uses the class enclosing them (e.g. the first web app to get
 a request!)
   * the web app's own classes using whatever you specify
It is the 2nd of these 3 bullet that is so disturbing to me.  I'd 
like to see these either have separate loggers for each web app, or 
behave like the rest the Tomcat loggers and cause a leak of data and 
references between web apps.  This -- and a reasonable set of MBeans 
to control/expose loggers seems quite doable with the approach Yoav 
and Bill laid out.  It's just unfortunate that the out-of-the-box 
behavior with web apps using log4j is so onerous.
The core loggers you talk about are probably the ones used for 
reporting your servlets/filters/etc loading errors. This seems webapp 
related to me.
Considering the classes containing these loggers are not per web app 
as best I can tell I don't believe the loggers are, but I guess more 
thorough debugging on my part is in order.  Perhaps I am mistaken and 
these are Tomcat loggers, but are specific to my web app.
Okay, I did a bit more digging.
*If*:
   * Your web app contains log4j.jar *and* commons-logging.jar.
   * You do not have log4j installed in any of Tomcat's own lib
 directories.
   * You use a JNDI or other contextual classloader based
 LogRepositorySelector.
*Then*:
   * The first Tomcat web application will steal loggers from the
 Tomcat base, i.e. any that happen to be obtained while the first
 web app's contextual classloader is active.
 o In a brief, simple test, whichever web app receives the
   first JSP page request will steal the following Tomcat
   loggers:
   + org.apache.jasper.compiler.Compiler
   + org.apache.jasper.compiler.JspReader
   + org.apache.jasper.runtime.PageContextImpl
   + org.apache.jasper.servlet.JspServletWrapper
   + org.apache.jasper.xmlparser.ParserUtils
   * By steal, I mean that these loggers end up in the
 LoggerRepository of the given web app. Their configuration is thus
 controlled by it.  Also, they use the log4j library from the given
 web app.
I could always be mistaken, but my examination of the LoggerRepository's 
involved seems pretty conclusive.

If one has to have log4j and commons-logging in one's web app, then the 
only solution appears to be to put log4j in Tomcat and use a 
non-contextual classloader based LogRepositorySelector.  Avoiding the 
contextual classloader based LogRepositorySelector only keeps Tomcats 
loggers from sharing the web app's intended LoggerRepository -- they 
still use the web app's log4j and its default LoggerRepository.

--
Jess Holle


Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
I had e-mailed this to users mailing list, but I have what I believe is 
a more dev follow-on question:

   Is there a good way to get my own start/stop action called at a
   per-VM level?
   This is assuming I end up having to move log4j up into Tomcat's
   classloaders -- at which point I'll want to install my
   LoggerRepository controlling MBeans up at this level as well -- as
   log4j's MBeans have issues and using log4j loggers means you don't
   get the (admittedly sparse) java.util.logging MBean coverage.
--
Jess Holle
Jess Holle wrote:
I have been trying to get really serious about log4j in web apps.
I note that Tomcat (thanks to commons-logging) uses java.util.logging 
*except* for loggers created while my web app's classloader is the 
current contextual classloader -- at which point it suddenly uses 
log4j (since my web app does) without giving my web app a chance to 
initialize it in any way as best I can tell.

My web app has a ServletContextListener which initializes log4j by 
setting up its own LoggerRepository, configuration file and watcher 
(since log4j's won't shutdown), etc.  Of course, every Tomcat logger 
created within my web app up until this point is now using log4j from 
my web app (!) and using the basic log4j.properties [if present] from 
my web app -- for loggers that apply to all web apps!

How is one supposed to work this?  I am currently using a static 
LoggerRepository reference within my web app so that a log4j loaded 
higher in the classloader tree won't cause LoggerRepository sharing.  
I was using a JNDI-based LoggerRepositorySelector as per log4j author 
recommendations, but this goes a step further than above -- it puts 
all the Tomcat loggers that are errantly using my log4j into my 
LoggerRepository -- which would be fine if these loggers were not 
shared with other web apps.

What's the solution here?  Do I have to put log4j into Tomcat's lib 
directories to force it to use its own centralized log4j?  Is that the 
best solution?

--
Jess Holle



Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
P.S.  Why does Tomcat use Commons Logging rather than UGLI?
Jess Holle wrote:
I had e-mailed this to users mailing list, but I have what I believe 
is a more dev follow-on question:

   Is there a good way to get my own start/stop action called at a
   per-VM level?
   This is assuming I end up having to move log4j up into Tomcat's
   classloaders -- at which point I'll want to install my
   LoggerRepository controlling MBeans up at this level as well -- as
   log4j's MBeans have issues and using log4j loggers means you don't
   get the (admittedly sparse) java.util.logging MBean coverage.
--
Jess Holle
Jess Holle wrote:
I have been trying to get really serious about log4j in web apps.
I note that Tomcat (thanks to commons-logging) uses java.util.logging 
*except* for loggers created while my web app's classloader is the 
current contextual classloader -- at which point it suddenly uses 
log4j (since my web app does) without giving my web app a chance to 
initialize it in any way as best I can tell.

My web app has a ServletContextListener which initializes log4j by 
setting up its own LoggerRepository, configuration file and watcher 
(since log4j's won't shutdown), etc.  Of course, every Tomcat logger 
created within my web app up until this point is now using log4j from 
my web app (!) and using the basic log4j.properties [if present] from 
my web app -- for loggers that apply to all web apps!

How is one supposed to work this?  I am currently using a static 
LoggerRepository reference within my web app so that a log4j loaded 
higher in the classloader tree won't cause LoggerRepository sharing.  
I was using a JNDI-based LoggerRepositorySelector as per log4j author 
recommendations, but this goes a step further than above -- it puts 
all the Tomcat loggers that are errantly using my log4j into my 
LoggerRepository -- which would be fine if these loggers were not 
shared with other web apps.

What's the solution here?  Do I have to put log4j into Tomcat's lib 
directories to force it to use its own centralized log4j?  Is that 
the best solution?

--
Jess Holle


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


RE: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Yoav Shapira
UGLI is far from mature enough to be used by Tomcat at this point.  When
log4j 1.3 is out, we'll see.

Yoav

 -Original Message-
 From: Jess Holle [mailto:[EMAIL PROTECTED]
 Sent: Thursday, March 17, 2005 4:17 PM
 To: Tomcat Developers List
 Subject: Re: Web apps vs. Logging vs. Tomcat
 
 P.S.  Why does Tomcat use Commons Logging rather than UGLI?
 
 Jess Holle wrote:
 
  I had e-mailed this to users mailing list, but I have what I believe
  is a more dev follow-on question:
 
 Is there a good way to get my own start/stop action called at a
 per-VM level?
 
 This is assuming I end up having to move log4j up into Tomcat's
 classloaders -- at which point I'll want to install my
 LoggerRepository controlling MBeans up at this level as well -- as
 log4j's MBeans have issues and using log4j loggers means you don't
 get the (admittedly sparse) java.util.logging MBean coverage.
 
  --
  Jess Holle
 
  Jess Holle wrote:
 
  I have been trying to get really serious about log4j in web apps.
 
  I note that Tomcat (thanks to commons-logging) uses java.util.logging
  *except* for loggers created while my web app's classloader is the
  current contextual classloader -- at which point it suddenly uses
  log4j (since my web app does) without giving my web app a chance to
  initialize it in any way as best I can tell.
 
  My web app has a ServletContextListener which initializes log4j by
  setting up its own LoggerRepository, configuration file and watcher
  (since log4j's won't shutdown), etc.  Of course, every Tomcat logger
  created within my web app up until this point is now using log4j from
  my web app (!) and using the basic log4j.properties [if present] from
  my web app -- for loggers that apply to all web apps!
 
  How is one supposed to work this?  I am currently using a static
  LoggerRepository reference within my web app so that a log4j loaded
  higher in the classloader tree won't cause LoggerRepository sharing.
  I was using a JNDI-based LoggerRepositorySelector as per log4j author
  recommendations, but this goes a step further than above -- it puts
  all the Tomcat loggers that are errantly using my log4j into my
  LoggerRepository -- which would be fine if these loggers were not
  shared with other web apps.
 
  What's the solution here?  Do I have to put log4j into Tomcat's lib
  directories to force it to use its own centralized log4j?  Is that
  the best solution?
 
  --
  Jess Holle
 
 
 
 
 
 -
 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]



Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
Thanks.  That answers that part of the question quite succinctly.
Now what remains is how can I work with log4j and commons logging -- 
commons logging's behavior vis-a-vis the contextual classloader seems 
onerous if not just plain wrong.

The only way I can see to fix this is to deploy log4j in Tomcat's own 
lib directories -- and deploy my log4j controller MBeans there for the 
default LoggeRepository and again in each web app for each web app's 
LoggerRepository.

If that's what I need to do, I'll get on with doing it, but I'd like to 
know I'm not just overlooking the obvious...

--
Jess Holle
Yoav Shapira wrote:
UGLI is far from mature enough to be used by Tomcat at this point.  When
log4j 1.3 is out, we'll see.
Yoav
 

-Original Message-
From: Jess Holle [mailto:[EMAIL PROTECTED]
Sent: Thursday, March 17, 2005 4:17 PM
To: Tomcat Developers List
Subject: Re: Web apps vs. Logging vs. Tomcat
P.S.  Why does Tomcat use Commons Logging rather than UGLI?
Jess Holle wrote:
   

I had e-mailed this to users mailing list, but I have what I believe
is a more dev follow-on question:
  Is there a good way to get my own start/stop action called at a
  per-VM level?
  This is assuming I end up having to move log4j up into Tomcat's
  classloaders -- at which point I'll want to install my
  LoggerRepository controlling MBeans up at this level as well -- as
  log4j's MBeans have issues and using log4j loggers means you don't
  get the (admittedly sparse) java.util.logging MBean coverage.
--
Jess Holle
Jess Holle wrote:
 

I have been trying to get really serious about log4j in web apps.
I note that Tomcat (thanks to commons-logging) uses java.util.logging
*except* for loggers created while my web app's classloader is the
current contextual classloader -- at which point it suddenly uses
log4j (since my web app does) without giving my web app a chance to
initialize it in any way as best I can tell.
My web app has a ServletContextListener which initializes log4j by
setting up its own LoggerRepository, configuration file and watcher
(since log4j's won't shutdown), etc.  Of course, every Tomcat logger
created within my web app up until this point is now using log4j from
my web app (!) and using the basic log4j.properties [if present] from
my web app -- for loggers that apply to all web apps!
How is one supposed to work this?  I am currently using a static
LoggerRepository reference within my web app so that a log4j loaded
higher in the classloader tree won't cause LoggerRepository sharing.
I was using a JNDI-based LoggerRepositorySelector as per log4j author
recommendations, but this goes a step further than above -- it puts
all the Tomcat loggers that are errantly using my log4j into my
LoggerRepository -- which would be fine if these loggers were not
shared with other web apps.
What's the solution here?  Do I have to put log4j into Tomcat's lib
directories to force it to use its own centralized log4j?  Is that
the best solution?
--
Jess Holle
   


 

-
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]
 




RE: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Yoav Shapira
Hola,
Your approach is right and should work.  You basically have to move
everything up the classloader hierarchy into Tomcat's section, and have a
copy of the MBean stuff in each webapp classloader repository that you want
to manage.

And I agree that it sucks...

Yoav

 -Original Message-
 From: Jess Holle [mailto:[EMAIL PROTECTED]
 Sent: Thursday, March 17, 2005 4:30 PM
 To: Tomcat Developers List
 Subject: Re: Web apps vs. Logging vs. Tomcat
 
 Thanks.  That answers that part of the question quite succinctly.
 
 Now what remains is how can I work with log4j and commons logging --
 commons logging's behavior vis-a-vis the contextual classloader seems
 onerous if not just plain wrong.
 
 The only way I can see to fix this is to deploy log4j in Tomcat's own
 lib directories -- and deploy my log4j controller MBeans there for the
 default LoggeRepository and again in each web app for each web app's
 LoggerRepository.
 
 If that's what I need to do, I'll get on with doing it, but I'd like to
 know I'm not just overlooking the obvious...
 
 --
 Jess Holle
 
 Yoav Shapira wrote:
 
 UGLI is far from mature enough to be used by Tomcat at this point.  When
 log4j 1.3 is out, we'll see.
 
 Yoav
 
 
 -Original Message-
 From: Jess Holle [mailto:[EMAIL PROTECTED]
 Sent: Thursday, March 17, 2005 4:17 PM
 To: Tomcat Developers List
 Subject: Re: Web apps vs. Logging vs. Tomcat
 
 P.S.  Why does Tomcat use Commons Logging rather than UGLI?
 
 Jess Holle wrote:
 
 
 
 I had e-mailed this to users mailing list, but I have what I believe
 is a more dev follow-on question:
 
Is there a good way to get my own start/stop action called at a
per-VM level?
 
This is assuming I end up having to move log4j up into Tomcat's
classloaders -- at which point I'll want to install my
LoggerRepository controlling MBeans up at this level as well -- as
log4j's MBeans have issues and using log4j loggers means you don't
get the (admittedly sparse) java.util.logging MBean coverage.
 
 --
 Jess Holle
 
 Jess Holle wrote:
 
 
 
 I have been trying to get really serious about log4j in web apps.
 
 I note that Tomcat (thanks to commons-logging) uses java.util.logging
 *except* for loggers created while my web app's classloader is the
 current contextual classloader -- at which point it suddenly uses
 log4j (since my web app does) without giving my web app a chance to
 initialize it in any way as best I can tell.
 
 My web app has a ServletContextListener which initializes log4j by
 setting up its own LoggerRepository, configuration file and watcher
 (since log4j's won't shutdown), etc.  Of course, every Tomcat logger
 created within my web app up until this point is now using log4j from
 my web app (!) and using the basic log4j.properties [if present] from
 my web app -- for loggers that apply to all web apps!
 
 How is one supposed to work this?  I am currently using a static
 LoggerRepository reference within my web app so that a log4j loaded
 higher in the classloader tree won't cause LoggerRepository sharing.
 I was using a JNDI-based LoggerRepositorySelector as per log4j author
 recommendations, but this goes a step further than above -- it puts
 all the Tomcat loggers that are errantly using my log4j into my
 LoggerRepository -- which would be fine if these loggers were not
 shared with other web apps.
 
 What's the solution here?  Do I have to put log4j into Tomcat's lib
 directories to force it to use its own centralized log4j?  Is that
 the best solution?
 
 --
 Jess Holle
 
 
 
 
 
 
 -
 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]



Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Remy Maucherat
Yoav Shapira wrote:
UGLI is far from mature enough to be used by Tomcat at this point.  When
log4j 1.3 is out, we'll see.
I already voted on that: -1.
Rémy
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
Remy Maucherat wrote:
Yoav Shapira wrote:
UGLI is far from mature enough to be used by Tomcat at this point.  When
log4j 1.3 is out, we'll see.
I already voted on that: -1.
Why out of curiosity?  I don't have a pro-UGLI ax to grind here, but 
Commons-Logging's behavior in Tomcat is really undesirable as is.

Now if you're inside JBoss and it has pre-established log4j and 
configured it prior to Tomcat loading, then I don't see a problem with 
Commons Logging.  Standalone Tomcat's Commons Logging behavior vis-a-vis 
log4j would seem to be an issue, though.  The issues are especially bad 
and bizarre when log4j is used in a web app but Tomcat itself does not 
have log4j installed, but this is only part of the issue.

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
Just one more stupid question:
   How/where would I register/deregister (start/stop) MBeans at the
   Tomcat level for the Tomcat-level log4j LoggerRepository -- rather
   than in my ServletContextListener?
   For per-web-app MBeans, I can use ServletContextListener, of course,
   but given that log4j loggers are not JMX-exposed, I'd like to put
   some MBeans to do this up at the Tomcat application level.  I do
   this in my web app, but I'd like to have the Tomcat-level MBeans
   installed even without any of my web apps installed.
--
Jess Holle
Yoav Shapira wrote:
Hola,
Your approach is right and should work.  You basically have to move
everything up the classloader hierarchy into Tomcat's section, and have a
copy of the MBean stuff in each webapp classloader repository that you want
to manage.
And I agree that it sucks...
Yoav
 

-Original Message-
From: Jess Holle [mailto:[EMAIL PROTECTED]
Sent: Thursday, March 17, 2005 4:30 PM
To: Tomcat Developers List
Subject: Re: Web apps vs. Logging vs. Tomcat
Thanks.  That answers that part of the question quite succinctly.
Now what remains is how can I work with log4j and commons logging --
commons logging's behavior vis-a-vis the contextual classloader seems
onerous if not just plain wrong.
The only way I can see to fix this is to deploy log4j in Tomcat's own
lib directories -- and deploy my log4j controller MBeans there for the
default LoggeRepository and again in each web app for each web app's
LoggerRepository.
If that's what I need to do, I'll get on with doing it, but I'd like to
know I'm not just overlooking the obvious...
--
Jess Holle
Yoav Shapira wrote:
   

UGLI is far from mature enough to be used by Tomcat at this point.  When
log4j 1.3 is out, we'll see.
Yoav
 

-Original Message-
From: Jess Holle [mailto:[EMAIL PROTECTED]
Sent: Thursday, March 17, 2005 4:17 PM
To: Tomcat Developers List
Subject: Re: Web apps vs. Logging vs. Tomcat
P.S.  Why does Tomcat use Commons Logging rather than UGLI?
Jess Holle wrote:

   

I had e-mailed this to users mailing list, but I have what I believe
is a more dev follow-on question:
 Is there a good way to get my own start/stop action called at a
 per-VM level?
 This is assuming I end up having to move log4j up into Tomcat's
 classloaders -- at which point I'll want to install my
 LoggerRepository controlling MBeans up at this level as well -- as
 log4j's MBeans have issues and using log4j loggers means you don't
 get the (admittedly sparse) java.util.logging MBean coverage.
--
Jess Holle
Jess Holle wrote:

 

I have been trying to get really serious about log4j in web apps.
I note that Tomcat (thanks to commons-logging) uses java.util.logging
*except* for loggers created while my web app's classloader is the
current contextual classloader -- at which point it suddenly uses
log4j (since my web app does) without giving my web app a chance to
initialize it in any way as best I can tell.
My web app has a ServletContextListener which initializes log4j by
setting up its own LoggerRepository, configuration file and watcher
(since log4j's won't shutdown), etc.  Of course, every Tomcat logger
created within my web app up until this point is now using log4j from
my web app (!) and using the basic log4j.properties [if present] from
my web app -- for loggers that apply to all web apps!
How is one supposed to work this?  I am currently using a static
LoggerRepository reference within my web app so that a log4j loaded
higher in the classloader tree won't cause LoggerRepository sharing.
I was using a JNDI-based LoggerRepositorySelector as per log4j author
recommendations, but this goes a step further than above -- it puts
all the Tomcat loggers that are errantly using my log4j into my
LoggerRepository -- which would be fine if these loggers were not
shared with other web apps.
What's the solution here?  Do I have to put log4j into Tomcat's lib
directories to force it to use its own centralized log4j?  Is that
the best solution?
--
Jess Holle
   


 

-
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]
 




Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Bill Barker

- Original Message -
From: Jess Holle [EMAIL PROTECTED]
To: Tomcat Developers List tomcat-dev@jakarta.apache.org
Sent: Thursday, March 17, 2005 2:25 PM
Subject: Re: Web apps vs. Logging vs. Tomcat


 Just one more stupid question:

 How/where would I register/deregister (start/stop) MBeans at the
 Tomcat level for the Tomcat-level log4j LoggerRepository -- rather
 than in my ServletContextListener?


Sounds like a good use for conf/tomcat5-mbeans.xml.  It invokes the standard
Lifecycle methods (e.g. 'init', 'start', 'stop', 'destroy') of your MBeans
at the corresponding points of the Engine's Lifecycle, as well as handling
JMX registration and un-registration.

 For per-web-app MBeans, I can use ServletContextListener, of course,
 but given that log4j loggers are not JMX-exposed, I'd like to put
 some MBeans to do this up at the Tomcat application level.  I do
 this in my web app, but I'd like to have the Tomcat-level MBeans
 installed even without any of my web apps installed.

 --
 Jess Holle

 Yoav Shapira wrote:

 Hola,
 Your approach is right and should work.  You basically have to move
 everything up the classloader hierarchy into Tomcat's section, and have a
 copy of the MBean stuff in each webapp classloader repository that you
want
 to manage.
 
 And I agree that it sucks...
 
 Yoav
 
 
 
 -Original Message-
 From: Jess Holle [mailto:[EMAIL PROTECTED]
 Sent: Thursday, March 17, 2005 4:30 PM
 To: Tomcat Developers List
 Subject: Re: Web apps vs. Logging vs. Tomcat
 
 Thanks.  That answers that part of the question quite succinctly.
 
 Now what remains is how can I work with log4j and commons logging --
 commons logging's behavior vis-a-vis the contextual classloader seems
 onerous if not just plain wrong.
 
 The only way I can see to fix this is to deploy log4j in Tomcat's own
 lib directories -- and deploy my log4j controller MBeans there for the
 default LoggeRepository and again in each web app for each web app's
 LoggerRepository.
 
 If that's what I need to do, I'll get on with doing it, but I'd like to
 know I'm not just overlooking the obvious...
 
 --
 Jess Holle
 
 Yoav Shapira wrote:
 
 
 
 UGLI is far from mature enough to be used by Tomcat at this point.
When
 log4j 1.3 is out, we'll see.
 
 Yoav
 
 
 
 
 -Original Message-
 From: Jess Holle [mailto:[EMAIL PROTECTED]
 Sent: Thursday, March 17, 2005 4:17 PM
 To: Tomcat Developers List
 Subject: Re: Web apps vs. Logging vs. Tomcat
 
 P.S.  Why does Tomcat use Commons Logging rather than UGLI?
 
 Jess Holle wrote:
 
 
 
 
 
 I had e-mailed this to users mailing list, but I have what I believe
 is a more dev follow-on question:
 
   Is there a good way to get my own start/stop action called at a
   per-VM level?
 
   This is assuming I end up having to move log4j up into Tomcat's
   classloaders -- at which point I'll want to install my
   LoggerRepository controlling MBeans up at this level as well -- as
   log4j's MBeans have issues and using log4j loggers means you don't
   get the (admittedly sparse) java.util.logging MBean coverage.
 
 --
 Jess Holle
 
 Jess Holle wrote:
 
 
 
 
 
 I have been trying to get really serious about log4j in web apps.
 
 I note that Tomcat (thanks to commons-logging) uses
java.util.logging
 *except* for loggers created while my web app's classloader is the
 current contextual classloader -- at which point it suddenly uses
 log4j (since my web app does) without giving my web app a chance to
 initialize it in any way as best I can tell.
 
 My web app has a ServletContextListener which initializes log4j by
 setting up its own LoggerRepository, configuration file and watcher
 (since log4j's won't shutdown), etc.  Of course, every Tomcat logger
 created within my web app up until this point is now using log4j
from
 my web app (!) and using the basic log4j.properties [if present]
from
 my web app -- for loggers that apply to all web apps!
 
 How is one supposed to work this?  I am currently using a static
 LoggerRepository reference within my web app so that a log4j loaded
 higher in the classloader tree won't cause LoggerRepository sharing.
 I was using a JNDI-based LoggerRepositorySelector as per log4j
author
 recommendations, but this goes a step further than above -- it puts
 all the Tomcat loggers that are errantly using my log4j into my
 LoggerRepository -- which would be fine if these loggers were not
 shared with other web apps.
 
 What's the solution here?  Do I have to put log4j into Tomcat's lib
 directories to force it to use its own centralized log4j?  Is that
 the best solution?
 
 --
 Jess Holle
 
 
 
 
 
 
 
 
 -
 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

Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
Bill Barker wrote:
- Original Message -
From: Jess Holle [EMAIL PROTECTED]
To: Tomcat Developers List tomcat-dev@jakarta.apache.org
Sent: Thursday, March 17, 2005 2:25 PM
Subject: Re: Web apps vs. Logging vs. Tomcat
 

Just one more stupid question:
   How/where would I register/deregister (start/stop) MBeans at the
   Tomcat level for the Tomcat-level log4j LoggerRepository -- rather
   than in my ServletContextListener?
   

Sounds like a good use for conf/tomcat5-mbeans.xml.  It invokes the standard
Lifecycle methods (e.g. 'init', 'start', 'stop', 'destroy') of your MBeans
at the corresponding points of the Engine's Lifecycle, as well as handling
JMX registration and un-registration.
 

Cool!  Thanks!
Do I have to actually implement Lifecycle or just provide these 
methods?  Will a standard/dynamic MBean do or does it have to be a model 
MBean?  [Mine extend StandardMBean and implement MBeanRegistration at 
the moment.]

--
Jess Holle


Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Remy Maucherat
Jess Holle wrote:
Why out of curiosity?  I don't have a pro-UGLI ax to grind here, but 
Commons-Logging's behavior in Tomcat is really undesirable as is.
It would be the same anyway: the loading configuration and the logger 
instances will be tied to the webapp classloader. It has to work this 
way. As I understand it, the thing that does not work for you right now 
is that Tomcat uses your webapp's logger namespace before your callbacks 
are called.

Now if you're inside JBoss and it has pre-established log4j and 
configured it prior to Tomcat loading, then I don't see a problem with 
Commons Logging.  Standalone Tomcat's Commons Logging behavior vis-a-vis 
log4j would seem to be an issue, though.  The issues are especially bad 
and bizarre when log4j is used in a web app but Tomcat itself does not 
have log4j installed, but this is only part of the issue.
I don't see any real difference. There should be plenty of container 
listeners and stuff available to configure this.
(I see Bill just mentioned conf/tomcat5-mbeans.xml but I have no clue 
what it is)

BTW, JBoss (supposedly, I didn't check personally) uses commons-logging 
everywhere, and the logging implementation used is log4j.

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


Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Bill Barker

- Original Message -
From: Jess Holle [EMAIL PROTECTED]
To: Tomcat Developers List tomcat-dev@jakarta.apache.org
Sent: Thursday, March 17, 2005 3:12 PM
Subject: Re: Web apps vs. Logging vs. Tomcat


 Bill Barker wrote:

 - Original Message -
 From: Jess Holle [EMAIL PROTECTED]
 To: Tomcat Developers List tomcat-dev@jakarta.apache.org
 Sent: Thursday, March 17, 2005 2:25 PM
 Subject: Re: Web apps vs. Logging vs. Tomcat
 
 
 Just one more stupid question:
 
 How/where would I register/deregister (start/stop) MBeans at the
 Tomcat level for the Tomcat-level log4j LoggerRepository -- rather
 than in my ServletContextListener?
 
 
 
 Sounds like a good use for conf/tomcat5-mbeans.xml.  It invokes the
standard
 Lifecycle methods (e.g. 'init', 'start', 'stop', 'destroy') of your
MBeans
 at the corresponding points of the Engine's Lifecycle, as well as
handling
 JMX registration and un-registration.
 
 
 Cool!  Thanks!

 Do I have to actually implement Lifecycle or just provide these
 methods?  Will a standard/dynamic MBean do or does it have to be a model
 MBean?  [Mine extend StandardMBean and implement MBeanRegistration at
 the moment.]


You just need to provide the methods (if you wanted to code against
Catalina, you'd just create a LifecycleListener :).  This is a hook into
commons-modeler, so you technically could use a plain old JavaBean.
Otherwise, DynamicMBeans probably work best (or, at least give you the most
control).

 --
 Jess Holle





This message is intended only for the use of the person(s) listed above as the 
intended recipient(s), and may contain information that is PRIVILEGED and 
CONFIDENTIAL.  If you are not an intended recipient, you may not read, copy, or 
distribute this message or any attachment. If you received this communication 
in error, please notify us immediately by e-mail and then delete all copies of 
this message and any attachments.

In addition you should be aware that ordinary (unencrypted) e-mail sent through 
the Internet is not secure. Do not send confidential or sensitive information, 
such as social security numbers, account numbers, personal identification 
numbers and passwords, to us via ordinary (unencrypted) e-mail.


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

RE: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Yoav Shapira
Hi,

 Yoav Shapira wrote:
  UGLI is far from mature enough to be used by Tomcat at this point.  When
  log4j 1.3 is out, we'll see.
 
 I already voted on that: -1.
 
 Rémy

Yup, I know.  I'm holding out for the possibility that UGLI will be a good
enough solution and a significant enough improvement of JCL to merit
re-consideration at some future time.

As I said, it's not something I'm pushing now, as the above is far (on the
time scale) from happening.

Yoav


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



Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
Remy Maucherat wrote:
Jess Holle wrote:
Why out of curiosity?  I don't have a pro-UGLI ax to grind here, but 
Commons-Logging's behavior in Tomcat is really undesirable as is.
It would be the same anyway: the loading configuration and the logger 
instances will be tied to the webapp classloader. It has to work this 
way. As I understand it, the thing that does not work for you right 
now is that Tomcat uses your webapp's logger namespace before your 
callbacks are called.
Yes.  The issue is really that Tomcat uses log4j out of my web app for 
loggers that are to be used outside my web app.  Not only is the library 
used out of my web app but so is the configuration -- meaning web app A 
gets core Tomcat log output from web apps B and C...

Yoav confirmed that the solution is to move log4j and a default 
configuration higher in the stack so that everything uses it.  This 
together with a per-web-app ClassLoader (but not contextual 
classloader!) based LoggerRepository will ensure each web app gets its 
own loggers and configuration files and Tomcat core gets its own.

Now if you're inside JBoss and it has pre-established log4j and 
configured it prior to Tomcat loading, then I don't see a problem 
with Commons Logging.  Standalone Tomcat's Commons Logging behavior 
vis-a-vis log4j would seem to be an issue, though.  The issues are 
especially bad and bizarre when log4j is used in a web app but Tomcat 
itself does not have log4j installed, but this is only part of the 
issue.
I don't see any real difference. There should be plenty of container 
listeners and stuff available to configure this.
(I see Bill just mentioned conf/tomcat5-mbeans.xml but I have no clue 
what it is)
The nice thing about this as I understand it is that it would allow me 
to set up my own MBeans for a Tomcat-level / app-wide log4j 
LoggerRepository.

You're right, though, as far as per-web-app MBeans and 
LoggerRepository's -- there are more than enough servlet listeners, etc, 
in the servlet spec to handle this.

BTW, JBoss (supposedly, I didn't check personally) uses 
commons-logging everywhere, and the logging implementation used is log4j.
That works since *everything* uses log4j.  The issue is with Tomcat is 
really one of *not* having log4j at the Tomcat level but having it in 
your web app.  This leads to:

   * whole crop of loggers using java.util.logging (fine, to be
 expected, and there are Java 5 MBeans -- albeit limited -- to
 interact with these)
   * a few core Tomcat loggers that are *not* by nature per web app
 loggers using the log4j jar and configuration of the first web app
 that uses the class enclosing them (e.g. the first web app to get
 a request!)
   * the web app's own classes using whatever you specify
It is the 2nd of these 3 bullet that is so disturbing to me.  I'd like 
to see these either have separate loggers for each web app, or behave 
like the rest the Tomcat loggers and cause a leak of data and references 
between web apps.  This -- and a reasonable set of MBeans to 
control/expose loggers seems quite doable with the approach Yoav and 
Bill laid out.  It's just unfortunate that the out-of-the-box behavior 
with web apps using log4j is so onerous.

--
Jess Holle


Re: Web apps vs. Logging vs. Tomcat

2005-03-17 Thread Jess Holle
Bill Barker wrote:
You just need to provide the methods (if you wanted to code against
Catalina, you'd just create a LifecycleListener :).  This is a hook into
commons-modeler, so you technically could use a plain old JavaBean.
Otherwise, DynamicMBeans probably work best (or, at least give you the most
control).
 

I have gotten used to using my own subclasses to StandardMBean.  This 
allows me to lay out the static portion of my MBean with an interface 
and extend it as necessary -- adding dynamic and open MBean behaviors as 
necessary in my own classes.

Java 1.5's APT turns out to make automated generation of MBean 
descriptions, operation parameter names, impacts, etc, from MBean 
interface Javadoc, formal parmeter names, annotations, etc, quite 
simple.  A little more elbow grease and the descriptions are localized 
(based on the server's locale).

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