[logback-dev] [JIRA] Commented: (LBCLASSIC-275) LoggingEvent casts to LogbackMDCAdapter without checking

Chris Dolan (JIRA) noreply-jira at qos.ch
Thu Jun 9 20:12:51 CEST 2011


    [ http://jira.qos.ch/browse/LBCLASSIC-275?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12030#action_12030 ] 

Chris Dolan commented on LBCLASSIC-275:
---------------------------------------

Another possible fix would be to defer reading the MDC until as late as possible:
 * in prepareForDeferredProcessing() where getCopyOfContextMap() would be appropriate
 * in getMDCPropertyMap() and getMdc() which could lazily fetch the MDC

A proposed implementation:

  public void prepareForDeferredProcessing() {
    this.getFormattedMessage();
    this.getThreadName();
    // fixes http://jira.qos.ch/browse/LBCLASSIC-104
    if (mdcPropertyMap != null) {
      mdcPropertyMap = MDC.getCopyOfContextMap();
    }
  }

  public Map<String, String> getMDCPropertyMap() {
    if (mdcPropertyMap == null) {
      MDCAdapter mdc = MDC.getMDCAdapter();
      if (mdc instanceof LogbackMDCAdapter)
        return ((LogbackMDCAdapter)mdc).getPropertyMap();
      else
        mdcPropertyMap = mdc.getCopyOfContextMap();
    }
    return mdcPropertyMap;
  }

  public Map<String, String> getMdc() {
    return getMDCPropertyMap();
  }


> LoggingEvent casts to LogbackMDCAdapter without checking
> --------------------------------------------------------
>
>                 Key: LBCLASSIC-275
>                 URL: http://jira.qos.ch/browse/LBCLASSIC-275
>             Project: logback-classic
>          Issue Type: Bug
>    Affects Versions: 0.9.28
>            Reporter: Chris Dolan
>            Assignee: Logback dev list
>
> LoggingEvent has this code:
>     // ugly but under the circumstances acceptable
>     LogbackMDCAdapter logbackMDCAdapter = (LogbackMDCAdapter) MDC
>         .getMDCAdapter();
>     mdcPropertyMap = logbackMDCAdapter.getPropertyMap();
> I'm trying to build a logback implementation of the OSGi pax-logging-service (http://www.ops4j.org/projects/pax/logging/index.html). But I've got a problem that PAX exports org.slf4j.impl with their own MDC adapter that fails this cast. Theirs has the nice feature that the OSGi bundle context is automatically added to the MDC (at a performance cost, alas).  I'd like to see LoggingEvent changed to something like the following for improved flexibility:
>    MDCAdapter mdc = MDC.getMDCAdapter();
>    if (MDCAdaptor instanceof LogbackMDCAdapter)
>        mdcPropertyMap = ((LogbackMDCAdapter)mdc).getPropertyMap();
>    else
>        mdcPropertyMap = mdc.getCopyOfContextMap();

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the logback-dev mailing list