That is not really what I want. Let me expand my example a bit: void methodA() { Logger logger = LogManager.getLogger( "methodA" ); utilityMethod( ... ); ... }
void methodB() { Logger logger = LogManager.getLogger( "methodB" ); utilityMethod( ... ); ... } void utilityMethod() { // Which logger do I use? } The NDC only gives me a way to put context sensitive information in the logging statements. What I want is a way to get a Logger based on some type of logging context. In my example, I want fine grained control of my logging categories but, utilityMethod() may be called from different places. Here is what I would like to see: void methodA() { Logger logger = LogManager.pushLoggingContext( "methodA" ); utilityMethod( ... ); ... LogManager.popLoggingContext(); } void methodB() { Logger logger = LogManager.pushLoggingContext( "methodB" ); utilityMethod( ... ); ... LogManager.popLoggingContext(); } void utilityMethod() { // Use the current logger. Logger logger = LogManager.getLoggingContext(); } This, of course, could go on further too. utilityMethod() could change the current Logger before it calls some other method, etc. Make sense? Tony >>> [EMAIL PROTECTED] 06/07/04 10:43PM >>> What I think you want to use either the Nested Diagnostic Context (NDC) or the Mapped Diagnostic Context that is part of log4j and then have your appenders output them. The NDC is a stack that you can push things on as your code goes down the call stack. The MDC is useful as a ThreadLocal map that is often used to track such things as the User/IP etc of the user making the current request. Probably best to see this JavaDoc: MDC: http://logging.apache.org/log4j/docs/api/org/apache/log4j/MDC.html NDC: http://logging.apache.org/log4j/docs/api/org/apache/log4j/NDC.html cheers, Paul Smith On Mon, 7 Jun 2004, Tony Thompson wrote: > Is there any way currently to set a logging "context" for a thread? For > example, if I have a utility method that I call from two other methods, > I don't want to create a new category just for that utility method. > > void methodA() { > utilityMethod( ... ); > ... > } > > void methodB() { > utilityMethod( ... ); > ... > } > > When utilityMethod() is called from methodA(), I want it to use the > logging category established for methodA(). When it is called from > methodB(), I want it to use the category for methodB(). > > I would prefer not to pass in the Logger when I call utilityMethod() > because I want to do this in existing code and it would take a bunch of > extra work and be unnecessarily ugly. What would be ideal would be to > have the LogManager keep a ThreadLocal with the current logging > "context" (probably a stack). As methods get called, they can push a > new logging context onto the stack, if they wish or simply let the > current one be used for the current thread of execution. > > If log4j can't do this for me, would it make sense for log4j to offer > this type of functionality? > > Thanks for any help. > Tony > > --------------------------------------------------------------------- > 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] ------------------------------------------------------------ Mail was checked for spam by the Freeware Edition of No Spam Today! The Freeware Edition is free for personal and non-commercial use. You can remove this notice by purchasing a full license! To order or to find out more please visit: http://www.no-spam-today.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]