<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.1 from src/site/xdoc/manual/thread-context.xml at 2020-02-25
 | Rendered using Apache Maven Fluido Skin 1.8
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.9.1" />
    <meta name="author" content="Ralph Goers" />
    <meta name="author" content="Gary Gregory" />
    <title>Log4j &#x2013; Log4j 2 Thread Context</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.8.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
    <script src="../js/apache-maven-fluido-1.8.min.js"></script>
  </head>
  <body class="topBarDisabled">
    <div class="container-fluid">
      <header>
        <div id="banner">
          <div class="pull-left"><a href="http://logging.apache.org" id="bannerLeft"><img src="../images/ls-logo.jpg"  alt=""/></a></div>
          <div class="pull-right"><a href="http://logging.apache.org/log4j/2.x" id="bannerRight"><img src="../images/logo.png"  alt=""/></a></div>
          <div class="clear"><hr/></div>
        </div>

        <div id="breadcrumbs">
          <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2020-02-25<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 2.13.1</li>
      <li class="pull-right"><span class="divider">|</span>
<a href="https://github.com/apache/logging-log4j2" class="externalLink" title="GitHub">GitHub</a></li>
      <li class="pull-right"><span class="divider">|</span>
<a href="https://analysis.apache.org/dashboard/index/org.apache.logging.log4j:log4j" class="externalLink" title="Sonar">Sonar</a></li>
      <li class="pull-right"><span class="divider">|</span>
<a href="../../../" title="Logging Services">Logging Services</a></li>
      <li class="pull-right"><span class="divider">|</span>
<a href="https://www.apache.org/" class="externalLink" title="Apache">Apache</a></li>
      <li class="pull-right"><a href="https://cwiki.apache.org/confluence/display/LOGGING/Log4j" class="externalLink" title="Logging Wiki">Logging Wiki</a></li>
          </ul>
        </div>
      </header>
      <div class="row-fluid">
        <header id="leftColumn" class="span2">
          <nav class="well sidebar-nav">
  <ul class="nav nav-list">
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/home.png" alt="Apache Log4j™ 2" border="0"/> Apache Log4j™ 2</li>
    <li><a href="../index.html" title="About"><span class="none"></span>About</a></li>
    <li><a href="../download.html" title="Download"><span class="none"></span>Download</a></li>
    <li><a href="../javadoc.html" title="Javadoc"><span class="icon-chevron-right"></span>Javadoc</a></li>
    <li><a href="../maven-artifacts.html" title="Maven, Ivy, Gradle Artifacts"><span class="icon-chevron-right"></span>Maven, Ivy, Gradle Artifacts</a></li>
    <li><a href="../runtime-dependencies.html" title="Runtime Dependencies"><span class="none"></span>Runtime Dependencies</a></li>
    <li><a href="../changelog.html" title="Changelog"><span class="none"></span>Changelog</a></li>
    <li><a href="../faq.html" title="FAQ"><span class="none"></span>FAQ</a></li>
    <li><a href="../performance.html" title="Performance"><span class="icon-chevron-right"></span>Performance</a></li>
    <li><a href="../articles.html" title="Articles and Tutorials"><span class="none"></span>Articles and Tutorials</a></li>
    <li><a href="../support.html" title="Support"><span class="none"></span>Support</a></li>
    <li><a href="../thanks.html" title="Thanks"><span class="none"></span>Thanks</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/pencil.png" alt="For Contributors" border="0"/> For Contributors</li>
    <li><a href="../build.html" title="Building Log4j from Source"><span class="none"></span>Building Log4j from Source</a></li>
    <li><a href="../guidelines.html" title="Guidelines"><span class="none"></span>Guidelines</a></li>
    <li><a href="../javastyle.html" title="Style Guide"><span class="none"></span>Style Guide</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/book.png" alt="Manual" border="0"/> Manual</li>
    <li><a href="../manual/index.html" title="Introduction"><span class="none"></span>Introduction</a></li>
    <li><a href="../manual/architecture.html" title="Architecture"><span class="none"></span>Architecture</a></li>
    <li><a href="../manual/compatibility.html" title="Log4j 1.x Compatibility"><span class="none"></span>Log4j 1.x Compatibility</a></li>
    <li><a href="../manual/migration.html" title="Log4j 1.x Migration"><span class="none"></span>Log4j 1.x Migration</a></li>
    <li><a href="../manual/api.html" title="Java API"><span class="icon-chevron-down"></span>Java API</a>
     <ul class="nav nav-list">
      <li><a href="../manual/logbuilder.html" title="Log Builder"><span class="none"></span>Log Builder</a></li>
      <li><a href="../manual/flowtracing.html" title="Flow Tracing"><span class="none"></span>Flow Tracing</a></li>
      <li><a href="../manual/markers.html" title="Markers"><span class="none"></span>Markers</a></li>
      <li><a href="../manual/eventlogging.html" title="Event Logging"><span class="none"></span>Event Logging</a></li>
      <li><a href="../manual/messages.html" title="Messages"><span class="none"></span>Messages</a></li>
      <li class="active"><a href="#"><span class="none"></span>ThreadContext</a></li>
     </ul></li>
    <li><a href="../manual/scala-api.html" title="Scala API"><span class="none"></span>Scala API</a></li>
    <li><a href="../manual/configuration.html" title="Configuration"><span class="icon-chevron-right"></span>Configuration</a></li>
    <li><a href="../manual/usage.html" title="Usage"><span class="icon-chevron-right"></span>Usage</a></li>
    <li><a href="../manual/webapp.html" title="Web Applications and JSPs"><span class="icon-chevron-right"></span>Web Applications and JSPs</a></li>
    <li><a href="../manual/lookups.html" title="Lookups"><span class="icon-chevron-right"></span>Lookups</a></li>
    <li><a href="../manual/appenders.html" title="Appenders"><span class="icon-chevron-right"></span>Appenders</a></li>
    <li><a href="../manual/layouts.html" title="Layouts"><span class="icon-chevron-right"></span>Layouts</a></li>
    <li><a href="../manual/filters.html" title="Filters"><span class="icon-chevron-right"></span>Filters</a></li>
    <li><a href="../manual/async.html" title="Async Loggers"><span class="icon-chevron-right"></span>Async Loggers</a></li>
    <li><a href="../manual/garbagefree.html" title="Garbage-free Logging"><span class="icon-chevron-right"></span>Garbage-free Logging</a></li>
    <li><a href="../manual/jmx.html" title="JMX"><span class="none"></span>JMX</a></li>
    <li><a href="../manual/logsep.html" title="Logging Separation"><span class="none"></span>Logging Separation</a></li>
    <li><a href="../manual/extending.html" title="Extending Log4j"><span class="icon-chevron-right"></span>Extending Log4j</a></li>
    <li><a href="../manual/plugins.html" title="Plugins"><span class="icon-chevron-right"></span>Plugins</a></li>
    <li><a href="../manual/customconfig.html" title="Programmatic Log4j Configuration"><span class="icon-chevron-right"></span>Programmatic Log4j Configuration</a></li>
    <li><a href="../manual/customloglevels.html" title="Custom Log Levels"><span class="icon-chevron-right"></span>Custom Log Levels</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/tag.png" alt="Related Projects" border="0"/> Related Projects</li>
    <li><a href="http://logging.apache.org/log4j/scala/index.html" class="externalLink" title="Log4j-Scala"><span class="none"></span>Log4j-Scala</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/link.png" alt="Legacy Sites" border="0"/> Legacy Sites</li>
    <li><a href="http://logging.apache.org/log4j/1.2/" class="externalLink" title="Log4j 1.2 - End of Life"><span class="none"></span>Log4j 1.2 - End of Life</a></li>
    <li><a href="http://logging.apache.org/log4j/log4j-2.3/" class="externalLink" title="Log4j 2.3 - Java 6"><span class="none"></span>Log4j 2.3 - Java 6</a></li>
    <li><a href="http://logging.apache.org/log4j/log4j-2.12.1" class="externalLink" title="Log4j 2.12.1 - Java 7"><span class="none"></span>Log4j 2.12.1 - Java 7</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/cog.png" alt="Components" border="0"/> Components</li>
    <li><a href="../log4j-api/index.html" title="API"><span class="none"></span>API</a></li>
    <li><a href="../log4j-core/index.html" title="Implementation"><span class="none"></span>Implementation</a></li>
    <li><a href="../log4j-jcl/index.html" title="Commons Logging Bridge"><span class="none"></span>Commons Logging Bridge</a></li>
    <li><a href="../log4j-1.2-api/index.html" title="Log4j 1.2 API"><span class="none"></span>Log4j 1.2 API</a></li>
    <li><a href="../log4j-slf4j-impl/index.html" title="SLF4J Binding"><span class="none"></span>SLF4J Binding</a></li>
    <li><a href="../log4j-jul/index.html" title="JUL Adapter"><span class="none"></span>JUL Adapter</a></li>
    <li><a href="../log4j-to-slf4j/index.html" title="Log4j 2 to SLF4J Adapter"><span class="none"></span>Log4j 2 to SLF4J Adapter</a></li>
    <li><a href="../log4j-flume-ng/index.html" title="Apache Flume Appender"><span class="none"></span>Apache Flume Appender</a></li>
    <li><a href="../log4j-taglib/index.html" title="Log4j Tag Library"><span class="none"></span>Log4j Tag Library</a></li>
    <li><a href="../log4j-jmx-gui/index.html" title="Log4j JMX GUI"><span class="none"></span>Log4j JMX GUI</a></li>
    <li><a href="../log4j-web/index.html" title="Log4j Web Application Support"><span class="none"></span>Log4j Web Application Support</a></li>
    <li><a href="../log4j-appserver/index.html" title="Log4j Application Server Integration"><span class="none"></span>Log4j Application Server Integration</a></li>
    <li><a href="../log4j-couchdb/index.html" title="Log4j CouchDB appender"><span class="none"></span>Log4j CouchDB appender</a></li>
    <li><a href="../log4j-mongodb2/index.html" title="Log4j MongoDB2 appender"><span class="none"></span>Log4j MongoDB2 appender</a></li>
    <li><a href="../log4j-mongodb3/index.html" title="Log4j MongoDB3 appender"><span class="none"></span>Log4j MongoDB3 appender</a></li>
    <li><a href="../log4j-cassandra/index.html" title="Log4j Cassandra appender"><span class="none"></span>Log4j Cassandra appender</a></li>
    <li><a href="../log4j-iostreams/index.html" title="Log4j IO Streams"><span class="none"></span>Log4j IO Streams</a></li>
    <li><a href="../log4j-liquibase/index.html" title="Log4j Liquibase Binding"><span class="none"></span>Log4j Liquibase Binding</a></li>
    <li><a href="../log4j-docker/index.html" title="Log4j Docker Support"><span class="none"></span>Log4j Docker Support</a></li>
    <li><a href="../log4j-spring-cloud-config/log4j-spring-cloud-config-client/index.html" title="Log4j Spring Cloud Config Client"><span class="none"></span>Log4j Spring Cloud Config Client</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/info.png" alt="Project Information" border="0"/> Project Information</li>
    <li><a href="../dependency-convergence.html" title="Dependency Convergence"><span class="none"></span>Dependency Convergence</a></li>
    <li><a href="../dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
    <li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a></li>
    <li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
    <li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a></li>
    <li><a href="../license.html" title="Project License"><span class="none"></span>Project License</a></li>
    <li><a href="../source-repository.html" title="Source Repository"><span class="none"></span>Source Repository</a></li>
    <li><a href="../project-summary.html" title="Project Summary"><span class="none"></span>Project Summary</a></li>
   <li class="nav-header"><img class="imageLink" src="../img/glyphicons/layers.png" alt="Project Reports" border="0"/> Project Reports</li>
    <li><a href="../changes-report.html" title="Changes Report"><span class="none"></span>Changes Report</a></li>
    <li><a href="../jira-report.html" title="JIRA Report"><span class="none"></span>JIRA Report</a></li>
    <li><a href="../rat-report.html" title="RAT Report"><span class="none"></span>RAT Report</a></li>
  </ul>
          </nav>
          <div class="well sidebar-nav">
            <hr />
            <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
            </div>
          </div>
        </header>
        <main id="bodyColumn"  class="span10" >

    
      <section>
<h2><a name="Log4j_2_API"></a>Log4j 2 API</h2>
        <section>
<h3><a name="Thread_Context"></a>Thread Context</h3>
          <section>
<h4><a name="Introduction"></a>Introduction</h4>
          
<p>Log4j introduced the concept of the Mapped Diagnostic Context or MDC. It has been documented and
            discussed in numerous places including
            <a class="externalLink" href="http://veerasundar.com/blog/2009/10/log4j-mdc-mapped-diagnostic-context-what-and-why/">Log4j MDC: What and Why</a> and
            <a class="externalLink" href="http://blog.f12.no/wp/2004/12/09/log4j-and-the-mapped-diagnostic-context/">Log4j and the Mapped Diagnostic Context</a>.
            In addition, Log4j 1.x provides support for a Nested Diagnostic Context or NDC. It too has been documented
            and discussed in various places such as
            <a class="externalLink" href="http://lstierneyltd.com/blog/development/log4j-nested-diagnostic-contexts-ndc/">Log4j NDC</a>.
            SLF4J/Logback followed with its own implementation of the MDC, which is documented very well at
            <a class="externalLink" href="http://logback.qos.ch/manual/mdc.html">Mapped Diagnostic Context</a>.
          </p>
          
<p>Log4j 2 continues with the idea of the MDC and the NDC but merges them into a single Thread Context.
            The Thread Context Map is the equivalent of the MDC and the Thread Context Stack is the equivalent of the
            NDC. Although these are frequently used for purposes other than diagnosing problems, they are still
            frequently referred to as the MDC and NDC in Log4j 2 since they are already well known by those acronyms.
          </p>
          </section><section>
<h4><a name="Fish_Tagging"></a>Fish Tagging</h4>
          
<p>Most real-world systems have to deal with multiple clients simultaneously. In a typical multithreaded
            implementation of such a system, different threads will handle different clients. Logging is
            especially well suited to trace and debug complex distributed applications. A common approach to
            differentiate the logging output of one client from another is to instantiate a new separate logger for
            each client. This promotes the proliferation of loggers and increases the management overhead of logging.
          </p>
          
<p>A lighter technique is to uniquely stamp each log request initiated from the same client interaction.
            Neil Harrison described this method in the book &quot;Patterns for Logging Diagnostic Messages,&quot; in <i>Pattern
            Languages of Program Design 3</i>, edited by R. Martin, D.  Riehle, and F. Buschmann
            (Addison-Wesley, 1997). Just as a fish can be tagged and have its movement tracked, stamping log
            events with a common tag or set of data elements allows the complete flow of a transaction or a request
            to be tracked. We call this <i>Fish Tagging</i>.
          </p>
          
<p>Log4j provides two mechanisms for performing Fish Tagging; the Thread Context Map and the Thread
            Context Stack. The Thread Context Map allows any number of items to be added and be identified
            using key/value pairs. The Thread Context Stack allows one or more items to be pushed on the
            Stack and then be identified by their order in the Stack or by the data itself. Since key/value
            pairs are more flexible, the Thread Context Map is recommended when data items may be added during
            the processing of the request or when there are more than one or two items.
          </p>
           
<p>To uniquely stamp each request using the Thread Context Stack, the user pushes contextual information
             on to the Stack.
           </p>
            
<div>
<pre class="prettyprint linenums">
ThreadContext.push(UUID.randomUUID().toString()); // Add the fishtag;

logger.debug(&quot;Message 1&quot;);
.
.
.
logger.debug(&quot;Message 2&quot;);
.
.
ThreadContext.pop();</pre></div>
          
<p>
            The alternative to the Thread Context Stack is the Thread Context Map. In this case, attributes
            associated with the request being processed are adding at the beginning and removed at the end
            as follows:
          </p>
          
<div>
<pre class="prettyprint linenums">
ThreadContext.put(&quot;id&quot;, UUID.randomUUID().toString()); // Add the fishtag;
ThreadContext.put(&quot;ipAddress&quot;, request.getRemoteAddr());
ThreadContext.put(&quot;loginId&quot;, session.getAttribute(&quot;loginId&quot;));
ThreadContext.put(&quot;hostName&quot;, request.getServerName());
.
logger.debug(&quot;Message 1&quot;);
.
.
logger.debug(&quot;Message 2&quot;);
.
.
ThreadContext.clear();</pre></div>

          </section><section>
<h4><a name="CloseableThreadContext"></a>CloseableThreadContext</h4>
		  
<p>When placing items on the stack or map, it's necessary to remove then again when appropriate. To assist with
		  this, the CloseableThreadContext implements the <a class="externalLink" href="http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html">AutoCloseable
		  interface</a>. This allows items to be pushed to the stack or put in the map, and removed when the close() method is called -
		  or automatically as part of a try-with-resources. For example, to temporarily push something on to the stack and then remove it:
          </p>
		  
<div>
<pre class="prettyprint linenums">
// Add to the ThreadContext stack for this try block only;
try (final CloseableThreadContext.Instance ctc = CloseableThreadContext.push(UUID.randomUUID().toString())) {

    logger.debug(&quot;Message 1&quot;);
.
.
    logger.debug(&quot;Message 2&quot;);
.
.
}</pre></div>
          
<p>
          Or, to temporarily put something in the map:
          </p>
		  
<div>
<pre class="prettyprint linenums">
// Add to the ThreadContext map for this try block only;
try (final CloseableThreadContext.Instance ctc = CloseableThreadContext.put(&quot;id&quot;, UUID.randomUUID().toString())
                                                                .put(&quot;loginId&quot;, session.getAttribute(&quot;loginId&quot;))) {

    logger.debug(&quot;Message 1&quot;);
.
.
    logger.debug(&quot;Message 2&quot;);
.
.
}</pre></div>

            If you're using a thread pool, then you can initialise a CloseableThreadContext by using the
            putAll(final Map&lt;String, String&gt; values) and/or
            pushAll(List&lt;String&gt; messages) methods;
            
<div>
<pre class="prettyprint linenums">
for( final Session session : sessions ) {
    try (final CloseableThreadContext.Instance ctc = CloseableThreadContext.put(&quot;loginId&quot;, session.getAttribute(&quot;loginId&quot;))) {
        logger.debug(&quot;Starting background thread for user&quot;);
        final Map&lt;String, String&gt; values = ThreadContext.getImmutableContext();
        final List&lt;String&gt; messages = ThreadContext.getImmutableStack().asList();
        executor.submit(new Runnable() {
        public void run() {
            try (final CloseableThreadContext.Instance ctc = CloseableThreadContext.putAll(values).pushAll(messages)) {
                logger.debug(&quot;Processing for user started&quot;);
                .
                logger.debug(&quot;Processing for user completed&quot;);
            }
        });
    }
}</pre></div>
		  </section><section>
<h4><a name="Implementation_details"></a>Implementation details</h4>
          
<p>The Stack and the Map are managed per thread and are based on
            <a class="externalLink" href="http://docs.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html">ThreadLocal</a>
            by default. The Map can be configured to use an
            <a class="externalLink" href="http://docs.oracle.com/javase/6/docs/api/java/lang/InheritableThreadLocal.html">InheritableThreadLocal</a>
            (see the <a href="#Configuration">Configuration</a> section).
            When configured this way, the contents of the Map will be passed to child threads. However, as
            discussed in the
            <a class="externalLink" href="http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#privilegedThreadFactory()">Executors</a>
            class and in other cases where thread pooling is utilized, the ThreadContext may not always be
            automatically passed to worker threads. In those cases the pooling mechanism should provide a means for
            doing so. The getContext() and cloneStack() methods can be used to obtain copies of the Map and Stack
            respectively.
          </p>
          
<p>
            Note that all methods of the
            <a href="../log4j-api/apidocs/org/apache/logging/log4j/ThreadContext.html">ThreadContext</a>
            class are static.
          </p>
          <a name="Configuration"></a>
          </section><section>
<h4><a name="Configuration"></a>Configuration</h4>
          
<ul>
            
<li>Set the system property `disableThreadContextMap` to `true` to disable the Thread Context Map.</li>
            
<li>Set the system property `disableThreadContextStack` to `true` to disable the Thread Context Stack.</li>
            
<li>Set the system property `disableThreadContext` to `true` to disable both the Thread Context Map and Stack.</li>
            
<li>Set the system property `log4j2.isThreadContextMapInheritable` to `true` to enable child threads to inherit the Thread
              Context Map.</li>
          </ul>
          </section><section>
<h4><a name="Including_the_ThreadContext_when_writing_logs"></a>Including the ThreadContext when writing logs</h4>
          
<p>
            The <a href="../log4j-core/apidocs/org/apache/logging/log4j/core/layout/PatternLayout.html">PatternLayout</a>
            provides mechanisms to print the contents of the
            <a href="../log4j-api/apidocs/org/apache/logging/log4j/ThreadContext.html">ThreadContext</a>
            Map and Stack.
          </p>
          
<ul>
            
<li>
              Use %X by itself to include the full contents of the Map.
            </li>
            
<li>
              Use %X{key} to include the specified key.
            </li>
            
<li>
              Use %x to include the full contents of the <a class="externalLink" href="http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html">Stack</a>.
            </li>
          </ul>
          </section><section>
<h4><a name="Custom_context_data_injectors_for_non_thread-local_context_data"></a>Custom context data injectors for non thread-local context data</h4>
          
<p>
            With the ThreadContext logging statements can be tagged so log entries that were related in some way
            can be linked via these tags. The limitation is that this only works for logging done on the same application thread
            (or child threads when configured).
          </p>
          
<p>
            Some applications have a thread model that delegates work to other threads, and
            in such models, tagging attributes that are put into a thread-local map in one thread are not visible
            in the other threads and logging done in the other threads will not show these attributes.
          </p>
          
<p>
            Log4j 2.7 adds a flexible mechanism to tag logging statements with context data coming from
            other sources than the ThreadContext.
            See the manual page on <a href="extending.html#Custom_ContextDataInjector">extending Log4j</a> for details.
          </p>
        </section></section>
      </section>
    

        </main>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
<p align="center">Copyright &copy; 1999-2020 <a class="external" href="http://www.apache.org">The Apache Software Foundation</a>. All Rights Reserved.<br>
      Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.</p>
        </div>
      </div>
    </footer>
  </body>
</html>
