logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shapira, Yoav" <Yoav.Shap...@mpi.com>
Subject RE: MDC in J2EE environment
Date Thu, 03 Apr 2003 14:22:01 GMT

My convention with MDC and NDC has been for each method to just worry
about its own logging.  For example:

In SessionBeanA:
public void executeUseCase()
  // Put whatever you want into MDC
  // Log entry into SessionBeanA::executeUseCase
  // Call SessionBeanB::executeUseCaseB()
  // If you have more logging statements here,
  // need to re-populate MDC.

In SessionBeanB:
public void executeUseCaseB()
  // Put whatever you want into MDC
  // Log entry into SessionBeanB:executeUseCaseB()

But the above may simply be my approach because I haven't had time to
think of a better one.  I also assume that populating an MDC is a very
cheap operation: O(1) hash entries.

Yoav Shapira
Millennium ChemInformatics

>-----Original Message-----
>From: Ebersole, Steven [mailto:steven.ebersole@vignette.com]
>Sent: Thursday, April 03, 2003 9:13 AM
>To: Log4j user list (E-mail)
>Subject: MDC in J2EE environment
>There is certain information which is thread contextual which I would
>to include into log4j's MDC to be available for logging.  One of these,
>example, is the currently executing user.  My architecture is such that
>requests come through a layer of stateless session EJBs.  Now these
>make calls into other session EJBs in order to fulfill their use-case:
>public class SessionBeanA
>    ...
>    public void executeUseCase()
>    {
>        ... // Do some work
>        SessionBeanB sessionBeanB = ...; // Lookup SessionBeanB
>        sessionBeanB.executeSomeRelatedUseCase();
>        ... // Do some more work
>    }
>public class SessionBeanB
>    ...
>    public void executeRelatedUseCase()
>    {
>        ... // Do something
>    }
>The typical usage of MDC seems to be:
>1) put vars into MDC
>2) do your work
>3) clean up MDC
>But if I apply this usage to the scenario above, when
>SessionBeanB.executeRelatedUseCase() cleans up the MDC, the information
>would no longer be contained in the MDC for LoggingEvents generated
>the "Do some more work" section of SessionBeanA.executeUseCase().
>I run weblogic 6.1, which unfortunately does not have support for "call
>interceptors" to know when a user context has been bound to a thread.
>Otherwise, I could simply setup MDC when a "session" is begun and clean
>the MDC when the session ends.  The only way around this I have been
>think of is to just always call MDC.put( "USER",
>mySessionContext.getCallerPrincipal().getName() ) at the beginning of
>and every session bean method.  But I would not ever be able to clean
>MDC because of this nesting described above.
>Is this OK?  Or this there a better way to do this?
>Steve Ebersole
>IT Integration Engineer
>Vignette Corporation
>Office: 512.741.4195
>Mobile: 512.297.5438
>Visit http://www.vignette.com
>To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: log4j-user-help@jakarta.apache.org

This e-mail, including any attachments, is a confidential business communication, and may
contain information that is confidential, proprietary and/or privileged.  This e-mail is intended
only for the individual(s) to whom it is addressed, and may not be saved, copied, printed,
disclosed or used by anyone else.  If you are not the(an) intended recipient, please immediately
delete this e-mail from your computer system and notify the sender.  Thank you.

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

View raw message