<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
#email-body { min-width: 30em !important; }
#email-page { padding: 8px !important; }
#email-banner { padding: 8px 8px 0 8px !important; }
#email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
#email-fields { padding: 0 8px 8px 8px !important; }
#email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
<tr valign="top">
<td id="email-page" style="padding:16px !important;">
<table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
<tr valign="top">
<td bgcolor="#003366" style="background-color:#003366;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="http://jira.qos.ch/s/en_USb9v8hf-418945332/850/27/_/jira-logo-scaled.png" alt="" style="vertical-align:top;" /></td>
</tr><tr valign="top">
<td id="email-banner" style="padding:32px 32px 0 32px;">
<table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
<img id="email-avatar" src="http://jira.qos.ch/secure/useravatar?avatarId=10122" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
<div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
<a class="user-hover" rel="sarah" id="email_sarah" href="http://jira.qos.ch/secure/ViewProfile.jspa?name=sarah" style="color:#326ca6;">Sarah</a>
commented on <img src="http://jira.qos.ch/images/icons/issuetypes/improvement.png" height="16" width="16" border="0" align="absmiddle" alt="Improvement"> <a style='color:#326ca6;text-decoration:none;' href='http://jira.qos.ch/browse/LOGBACK-624'>LOGBACK-624</a>
</div>
<div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
<a style='color:#326ca6;text-decoration:none;' href='http://jira.qos.ch/browse/LOGBACK-624'><strong>MDC Adapter with configurable InheritableThreadLocal</strong></a>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td id="email-fields" style="padding:0 32px 32px 32px;">
<table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
<tr valign="top">
<td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td colspan="2" style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 16px 0;width:100%;">
<div class="comment-block" style="background-color:#edf5ff;border:1px solid #dddddd;color:#000000;padding:12px;"><p>When Log4j was written, and probably when SLF4J & Logback were written, propagating to child threads was probably the right thing to do: it would match the expected/desired behavior for most people. I don't believe this is true anymore. People who are developing applications on the JVM today aren't as likely to be spinning off random threads here and there. Instead, they're quite likely to be using pooled fork-join executors and things like Akka actors.</p>
<p>In these more modern architectures, MDC inheritance is a disaster: it leaks information and breaks application state in surprising ways unless you override every utility that ever creates its own threads in these ways. Where I work, we have a non-blocking application stack based on Akka (we're using Scala, but it would be just as bad in Java). We looked at patching all the thread pools to clear the MDC on thread start and concluded it was both infeasible and too error prone, so we ended up forking Logback and creating a jar that has no inheritance. It was surprising to us that random threads that had never run a job had Job IDs and User IDs in their MDCs.</p>
<p>I don't have any data to back this up, but I would guess that this kind of scenario constitutes the majority of new applications that are or will use Logback: MDC inheritance will be a surprising problem rather than a nice feature. (There's also a major asymmetry in the failure modes: leaking information is generally a <b>much</b> more dangerous kind of failure than losing context.)</p>
<p>I do believe there is a legitimate reason to maintain backwards compatibility here. My suggestion is that the user should be able to plug in a callback object in the Logback config indicating which keys should be propagated to child threads. This could be <tt>PropagateAll</tt> (legacy behavior), <tt>PropagateNone</tt>, <tt>PropagateRegex</tt>. I would suggest that the default should become <tt>PropagateNone</tt>, for the reasons I describe above, but making it configurable would probably make everybody happy and prevent more people from forking Logback (as my company has done, privately).</p></div>
<div style="color:#505050;padding:4px 0 0 0;"> </div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td><!-- End #email-page -->
</tr>
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
This message is automatically generated by JIRA.<br />
If you think it was sent incorrectly, please contact your JIRA administrators<br />
For more information on JIRA, see: <a style='color:#326ca6;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
</td>
</tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->