<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!-- Generated by Apache Maven Doxia at 2020-08-26 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>Apache log4net &#x2013; Apache log4net Manual: Contexts - Apache log4net</title>
		<link rel="stylesheet" href="../../css/bootstrap.min.css" type="text/css" />
		<link rel="stylesheet" href="../../css/site.css" type="text/css" />
		<script type="text/javascript" src="../../js/jquery.min.js"></script>
		<script type="text/javascript" src="../../js/bootstrap.min.js"></script>
		<script type="text/javascript" src="../../js/prettify.min.js"></script>
		<script type="text/javascript" src="../../js/site.js"></script>
      <meta name="author" content="Nicko Cadell" />
    <meta name="Date-Revision-yyyymmdd" content="20200826" />
    <meta http-equiv="Content-Language" content="en" />
		<meta name="keywords" content="building log4net, log4net" />
				</head>
	<body class="composite">
		<a href="https://logging.apache.org/">
			<img class="logo-left" src="../../images/ls-logo.jpg" alt="Apache logging services logo" />
		</a>
		<!--img class="logo-right" src="../../images/logo.png" alt="Apache log4net logo" /-->
		<div class="clear"></div>

		<div class="navbar">
			<div class="navbar-inner">
				<div class="container-fluid">
					<a class="brand" href="http://logging.apache.org/log4net/">Apache log4net &trade;</a>
						<ul class="nav">
						<li>
					
				
				<a href="https://wiki.apache.org/logging" class="external" target="_blank" title="Logging Wiki">Logging Wiki</a>
			</li>
					<li>
					
				
				<a href="https://www.apache.org/" class="external" target="_blank" title="Apache">Apache</a>
			</li>
					<li>
					
				
				<a href="https://logging.apache.org/" class="external" target="_blank" title="Logging Services">Logging Services</a>
			</li>
					<li>
					
				
				<a href="https://github.com/apache/logging-log4net/" class="external" target="_blank" title="GitHub">GitHub</a>
			</li>
		</ul>
				</div>
			</div>
		</div>

		<div class="container-fluid">
			<table class="layout-table">
				<tr>
					<td class="sidebar">
						<div class="well sidebar-nav">
										<ul class="nav nav-list">
		 											 <li class="nav-header"><i class="icon-home"></i>Apache log4net</li>
																						<li class="none">
									<a href="../../index.html" title="About">About</a>
					</li>
 																<li class="none">
									<a href="../../download_log4net.cgi" title="Download">Download</a>
					</li>
 																<li class="none">
									<a href="../../release/security-reports.html" title="Security Reports">Security Reports</a>
					</li>
 																<li class="none">
									<a href="../../release/release-notes.html" title="Release Notes">Release Notes</a>
					</li>
 																<li class="none">
									<a href="../../license.html" title="License">License</a>
					</li>
 								</ul>
			<ul class="nav nav-list">
		 											 <li class="nav-header"><i class="icon-file"></i>Documentation</li>
																						<li class="none">
									<a href="../../release/features.html" title="Features">Features</a>
					</li>
 																<li class="none">
									<a href="../../release/framework-support.html" title="Supported Frameworks">Supported Frameworks</a>
					</li>
 																<li class="none">
									<a href="../../release/example-apps.html" title="Example Apps">Example Apps</a>
					</li>
 																<li class="none">
									<a href="../../release/config-examples.html" title="Config Examples">Config Examples</a>
					</li>
 																<li class="none">
									<a href="../../release/building.html" title="Building">Building</a>
					</li>
 																<li class="none">
									<a href="../../release/faq.html" title="FAQ">FAQ</a>
					</li>
 																<li class="none">
									<a href="../../release/howto/index.html" title="How Tos">How Tos</a>
					</li>
 																<li class="none">
									<a href="../../release/sdk/index.html" title="SDK Reference">SDK Reference</a>
					</li>
 								</ul>
			<ul class="nav nav-list">
		 											 <li class="nav-header"><i class="icon-book"></i>Manual</li>
																						<li class="none">
									<a href="../../release/manual/introduction.html" title="Introduction">Introduction</a>
					</li>
 																<li class="none">
									<a href="../../release/manual/configuration.html" title="Configuration">Configuration</a>
					</li>
 																	<li class="none active">
									<a href="../../release/manual/contexts.html" title="Contexts">Contexts</a>
					</li>
 																<li class="none">
									<a href="../../release/manual/plugins.html" title="Plugins">Plugins</a>
					</li>
 																<li class="none">
									<a href="../../release/manual/repositories.html" title="Repositories">Repositories</a>
					</li>
 																<li class="none">
									<a href="../../release/manual/internals.html" title="Internals">Internals</a>
					</li>
 								</ul>
			<ul class="nav nav-list">
		 											 <li class="nav-header"><i class="icon-pencil"></i>For Contributors</li>
																						<li class="none">
									<a href="../../mail-lists.html" title="Mailing Lists">Mailing Lists</a>
					</li>
 																<li class="none">
									<a href="../../issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
					</li>
 																<li class="none">
									<a href="../../source-repository.html" title="Repository">Repository</a>
					</li>
 																<li class="none">
									<a href="../../integration.html" title="Continuous Integration">Continuous Integration</a>
					</li>
 								</ul>
			<ul class="nav nav-list">
		 											 <li class="nav-header"><i class="icon-cog"></i>Project Reports</li>
																						<li class="none">
									<a href="../../rat-report.html" title="RAT Report">RAT Report</a>
					</li>
 								</ul>
			<ul class="nav nav-list">
		 											 <li class="nav-header"><i class="icon-info-sign"></i>Apache</li>
																						<li class="none">
					
				
				<a href="http://www.apache.org/" class="external" target="_blank" title="Home">Home</a>
					</li>
 																<li class="none">
					
				
				<a href="http://www.apache.org/licenses/" class="external" target="_blank" title="License">License</a>
					</li>
 																<li class="none">
					
				
				<a href="http://www.apache.org/foundation/sponsorship.html" class="external" target="_blank" title="Sponsorship">Sponsorship</a>
					</li>
 																<li class="none">
					
				
				<a href="http://www.apache.org/foundation/thanks.html" class="external" target="_blank" title="Thanks">Thanks</a>
					</li>
 																<li class="none">
					
				
				<a href="http://www.apache.org/security/" class="external" target="_blank" title="Security">Security</a>
					</li>
 																<li class="none">
					
				
				<a href="http://www.apachecon.com" class="external" target="_blank" title="Conferences">Conferences</a>
					</li>
 								</ul>
							</div>
						<div id="poweredBy">
															<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
				<img class="poweredBy" alt="Built by Maven" src="../../images/maven-feather.png" />
			</a>
									</div>
					</td>
					<td class="content">
						<!-- Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. 
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with 
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. -->

    
        <a name="main"></a>
<div class="section" id="main">
<h2><a name="Apache_log4net_Manual_-_Contexts"></a>Apache log4net&#x2122; Manual - Contexts</h2>
            
<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. An approach to differentiate the 
                logging output of one client from another is to instantiate a new separate 
                logger for each client. However 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.
            </p>
            
<p>
                Log4net supports different types of contextual logging and contexts with different scopes.
            </p>
            
            <a name="scopes"></a>
<div class="section" id="scopes">
<h2><a name="Scopes"></a>Scopes</h2>
                
<p>
                    Contextual data can be set in different scopes. These contexts have progressively narrower visibility.
                    In the logging event itself the values from all of the contexts are combined together such that
                    values specified in a lower scoped context hide values from a higher context.
                </p>
                
                
<div class="table">
                    
<table border="0" class="bodyTable">
                        
<tr class="a">
                            
<th>Scope</th>
                            
<th>Type</th>
                            
<th>Description</th>
                        </tr>
                        
<tr class="b" align="left">
                            
<td>Global</td>
                            
<td><span class="code">log4net.GlobalContext</span></td>
                            
<td>
                                The global context is shared by all threads in the current AppDomain.
                                This context is thread safe for use by multiple threads concurrently.
                            </td>
                        </tr>
                        
<tr class="a" align="left">
                            
<td>Thread</td>
                            
<td><span class="code">log4net.ThreadContext</span></td>
                            
<td>
                                The thread context is visible only to the current managed thread.
                            </td>
                        </tr>
                        
<tr class="b" align="left">
                            
<td>Logical Thread</td>
                            
<td><span class="code">log4net.LogicalThreadContext</span></td>
                            
<td>
                                The logical thread context is visible to a logical thread. Logical
                                threads can jump from one managed thread to another. For more details
                                see the .NET API <span class="code">System.Runtime.Remoting.Messaging.CallContext</span>.<br /></br>
                                For .NET Standard this uses <span class="code">AsyncLocal</span> rather
                                than <span class="code">CallContext</span>.
                            </td>
                        </tr>
                        
<tr class="a" align="left">
                            
<td>Event</td>
                            
<td><span class="code">log4net.Core.LoggingEvent</span></td>
                            
<td>
                                Each event captures the current contextual state at the time the event
                                is generated. Contextual data can be set on the event itself. This context
                                is only visible to the code generating the event itself.
                            </td>
                        </tr>
                    </table>
                </div>                
            </div>
            
            <a name="properties"></a>
<div class="section" id="properties">
<h2><a name="Context_Properties"></a>Context Properties</h2>
                
<p>
                    The log4net contexts store properties, i.e. name value pairs. The name is a string
                    the value is any object. A property can be set as follows:
                </p>
                
<div class="source">
<pre>
log4net.GlobalContext.Properties[&quot;name&quot;] = value;
</pre></div>
                
<p>
                    If properties with the same name are set in more than one context scope then
                    the value in the narrowest scope (lower down in the list above) will hide the
                    other values.
                </p>
                
<p>
                    The property values are stored as objects within the <span class="code">LoggingEvent</span>. 
                    The <span class="code">PatternLayout</span> supports rendering the value of a named
                    property using the <span class="code">%property{name}</span> syntax. The value is 
                    converted to a string by passing it to the <span class="code">log4net.ObjectRenderer.RendererMap</span>
                    which will locate any custom renderer for the value type. The default behavior for
                    custom types is to call the object's <span class="code">ToString()</span> method.
                </p>
                
                <a name="active"></a>
<div class="section" id="active">
<h2><a name="Active_Property_Values"></a>Active Property Values</h2>
                    
<p>
                        An active property value is one who's value changes over time.
                    </p>
                    
<p>
                        For example, imagine a custom type that implemented the 
                        <span class="code">ToString()</span> method to return the
                        number of bytes allocated by the runtime garbage collector. 
                    </p>
                
<div class="source">
<pre>
public class GCAllocatedBytesHelper
{
    public override string ToString()
    {
        return GC.GetTotalMemory(true).ToString();
    }
}</pre></div>
                    
<p>
                        An instance of this type can be added to the <span class="code">log4net.GlobalContext</span> 
                        during application startup: 
                    </p>
                
<div class="source">
<pre>
log4net.GlobalContext.Properties[&quot;GCAllocatedBytes&quot;] = new GCAllocatedBytesHelper();
</pre></div>
                    
<p>
                        Once this property is set in the context all subsequent logging events will have a property
                        called <i>GCAllocatedBytes</i>. The value of the property will be an instance of the
                        <span class="code">GCAllocatedBytesHelper</span> type. When this value is rendered to a 
                        string by calling the <span class="code">ToString</span> method the current number of bytes 
                        allocated by the garbage collector will be returned and included in the output.
                    </p>
                    
                </div>
                
            </div>
            
            <a name="stacks"></a>
<div class="section" id="stacks">
<h2><a name="Context_Stacks"></a>Context Stacks</h2>
                
<p>
                    Sometimes simple key value pairs are not the most convenient way of capturing contextual
                    information. A stack of information is a very convenient way of storing data especially
                    as our applications tend to be stack based.
                </p>
                
<p>
                    The <span class="code">ThreadContext</span> and <span class="code">LogicalThreadContext</span>
                    also support storing contextual data in a stack. The stack is stored in context property,
                    therefore stacks have names and more than one stack can exist in the same context. A property
                    value set in a narrower context would override a stack with the same property name set in a
                    wider scoped context.
                </p>
                
<p>
                    The stack supports <span class="code">Push</span> and <span class="code">Pop</span> methods.
                    As more contextual data is pushed onto the stack the stack grows. When the stack is rendered
                    all the data pushed onto the stack is output with the most recent data to the right hand
                    end of the string.
                </p>
                
<p>
                    As the stack is just an object stored in the context properties it is also rendered
                    using the same <span class="code">PatternLayout</span> syntax: <span class="code">%property{name}</span>.
                    Where <i>name</i> is the name of the stack.
                </p>
                
<p>
                    Calls the the stack's <span class="code">Push</span> and <span class="code">Pop</span>
                    methods must be matched up so that each push has a corresponding pop. The 
                    <span class="code">Push</span> method also returns an <span class="code">IDisposable</span>
                    object that will perform the required pop operation when it is disposed. This allows
                    the C# <i>using</i> syntax to be used to automate the stack management.
                </p>
                
<div class="source">
<pre>
using(log4net.ThreadContext.Stacks[&quot;NDC&quot;].Push(&quot;context&quot;))
{
    log.Info(&quot;Message&quot;);
}
</pre></div>
                
<p>
                    The INFO level log has a stack stored in its <i>NDC</i> property. The top item in the
                    stack is the string <i>context</i>.
                    The <i>using</i> syntax ensures that the value <i>context</i> is popped off the stack
                    at the end of the block.
                </p>
                
<p>
                    The <span class="code">using</span>
                    syntax is recommended because it removes some work load from the developer and 
                    reduces errors in matching up the Push and Pop calls, especially when exceptions
                    can occur.
                </p>
            </div>
            
            <a name="ndc"></a>
<div class="section" id="ndc">
<h2><a name="Nested_Diagnostic_Contexts"></a>Nested Diagnostic Contexts</h2>
                
<p>
                    The <span class="code">NDC</span> (Nested Diagnostic Context) exists for compatibility
                    with older versions of log4net. This helper class implements a stack which is stored
                    in the thread context property named <i>NDC</i>.
                </p>
            </div>
            
            <a name="mdc"></a>
<div class="section" id="mdc">
<h2><a name="Mapped_Diagnostic_Contexts"></a>Mapped Diagnostic Contexts</h2>
                
<p>
                    The <span class="code">MDC</span> (MappedDiagnostic Context) exists for compatibility
                    with older versions of log4net. This helper class implements a properties map which is 
                    mapped directly through to the thread context properties.
                </p>
            </div>
                
            
<p>
                To illustrate this point, let us take the example of a web service delivering 
                content to numerous clients. The web service can build the <span class="code">NDC</span> at the very 
                beginning of the request before executing other code. The contextual 
                information can be the client's host name and other information inherent to the 
                request, typically information contained in cookies. Hence, even if the web 
                service is serving multiple clients simultaneously, the logs initiated by the 
                same code, i.e. belonging to the same logger, can still be distinguished 
                because each client request will have a different <span class="code">NDC</span> stack. Contrast this with 
                the complexity of passing a freshly instantiated logger to all code exercised 
                during the client's request.
            </p>
            
<p>
                Nevertheless, some sophisticated applications, such as virtual hosting web 
                servers, must log differently depending on the virtual host context and also 
                depending on the software component issuing the request. Log4net supports 
                multiple logger repositories. This would allow each virtual host to possess its own copy 
                of the logger hierarchy. Configuring multiple logger hierarchies is beyond the 
                scope of this document.
            </p>

        </div>
    

					</td>
				</tr>
			</table>
		</div>

		<div class="footer">
							<p>Copyright &copy; 2004-2020 <a class="external" href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.</p>
				<p>Apache log4net, Apache, log4net, the Apache feather logo, the Apache Logging Services project logo and the Built by Maven logo are trademarks of The Apache Software Foundation.</p>
				<p>Site powered by <a class="external" href="http://getbootstrap.com/">Twitter Bootstrap</a>. Icons from <a class="external" href="http://glyphicons.com/">Glyphicons Free</a>.</p>
			</div>
		</div>
	</body>
</html>
