<!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 2017-04-28 -->
<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: Introduction - 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="20170428" />
    <meta http-equiv="Content-Language" content="en" />
		<meta name="keywords" content="log4net manual, 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/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 active">
									<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">
									<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_-_Introduction"></a>Apache log4net&#x2122; Manual - Introduction</h2>
            <a name="overview"></a>
<div class="section" id="overview">
<h2><a name="Overview"></a>Overview</h2>
                
<p>
                    This document is based on <i>Short introduction to log4j</i> by <i>Ceki G&#xfc;lc&#xfc;</i>.
                </p>
                
<p>
                    The log4net framework is based on Apache log4j&#x2122;, see <a class="externalLink" href="http://logging.apache.org/log4j/">
                        http://logging.apache.org/log4j/</a> for more information on log4j.
                    The log4net framework, source code, binaries, documentation, examples and related 
                    materials are published under the terms of the 
                    <a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>, 
                    a copy of which has been included with this distribution in the LICENSE.txt file.
                </p>
                
<p>
                    This document is an introduction to the log4net API, its unique features and 
                    design rationale. Log4net is an open source project based on the work of many 
                    authors. It allows the developer to control which log statements are output 
                    with arbitrary granularity. It is fully configurable at runtime using external 
                    configuration files.
                </p>
                
<p>
                    Almost every large application includes its own logging or tracing API. 
                    Inserting log statements into code is a low-tech method for debugging it. It 
                    may also be the only way because debuggers are not always available or 
                    applicable. This is usually the case for multithreaded applications and 
                    distributed applications at large.
                </p>
                
<p>
                    Once an application has been deployed it may not be possible to utilize 
                    development and debugging tools. An administrator can use effective logging 
                    systems to diagnose and fix many configuration issues.
                </p>
                
<p>
                    Experience indicates that logging is an important component of the development 
                    cycle. It offers several advantages. It provides precise <i>context</i> about the 
                    execution of the application. Once inserted into the code, the generation of 
                    logging output requires no human intervention. Moreover, log output can be 
                    saved in persistent medium to be studied at a later time. In addition to its 
                    use in the development cycle, a sufficiently rich logging package can also be 
                    viewed as an auditing tool.
                </p>
                
<p>
                    Logging does have its drawbacks. It can slow down an application. If too 
                    verbose, it can cause scrolling blindness. To alleviate these concerns, log4net 
                    is designed to be reliable, fast and extensible. Since logging is rarely the 
                    main focus of an application, the log4net API strives to be simple to 
                    understand and to use.
                </p>
            </div>
            
            <a name="frameworks"></a>
<div class="section" id="frameworks">
<h2><a name="Frameworks"></a>Frameworks</h2>
                
<p>
                    Log4net is available for several frameworks. For each supported framework an 
                    assembly targeting that framework is built:
                </p>
                
<ul>
                    
<li>.NET Standard 1.3 via .NET Core 1.0</li>
                    
<li>Microsoft&#xae; .NET Framework 1.0</li>
                    
<li>Microsoft .NET Framework 1.1</li>
                    
<li>Microsoft .NET Framework 2.0</li>
                    
<li>Microsoft .NET Framework 3.5</li>
                    
<li>Microsoft .NET Framework 4.0</li>
                    
<li>Microsoft .NET Framework 4.5</li>
                    
<li>Microsoft .NET Framework 3.5 Client Profile</li>
                    
<li>Microsoft .NET Framework 4.0 Client Profile</li>
                    
<li>Microsoft .NET Compact Framework 1.0</li>
                    
<li>Microsoft .NET Compact Framework 2.0</li>
                    
<li>Mono 1.0</li>
                    
<li>Mono 2.0</li>
                    
<li>Mono 3.5</li>
                    
<li>Mono 4.0</li>
                    
<li>Microsoft Shared Source CLI 1.0</li>
                    
<li>CLI 1.0 Compatible</li>
                </ul>
                
<p>
                    Not all frameworks are created equal and some features have been excluded from 
                    some of the builds. See the <a href="../framework-support.html">Framework Support</a> 
                    document for more information.
                </p>
            </div>
            
            <a name="loggers"></a>
<div class="section" id="loggers">
<h2><a name="Loggers_and_Appenders"></a>Loggers and Appenders</h2>
                
<p>
                    Log4net has three main components: <i>loggers</i>, <i>appenders</i> and <i>layouts</i>. 
                    These three types of components work together to enable developers to log 
                    messages according to message type and level, and to control at runtime how 
                    these messages are formatted and where they are reported. These components are
                    helped by <i>filters</i> that control the actions of the appender and
                    <i>object renderers</i> that turn objects into strings.
                </p>
                
                <a name="hierarchy"></a>
<div class="section" id="hierarchy">
<h2><a name="Logger_hierarchy"></a>Logger hierarchy</h2>
                    
<p>
                        The first and foremost advantage of any logging API over plain
                        <span class="code">System.Console.WriteLine</span>
                        resides in its ability to disable certain log statements while allowing others 
                        to print unhindered. This capability assumes that the logging space, that is, 
                        the space of all possible logging statements, is categorized according to some 
                        developer-chosen criteria.
                    </p>
                    
<p>
                        Loggers are named entities. Logger names are case-sensitive and they follow the 
                        following hierarchical naming rule:
                    </p>
                    
<dl class="rule">
                        
<dt>Named Hierarchy</dt>
                        
<dd>
                            
<p>
                                A logger is said to be an <i>ancestor</i> of another logger if its name 
                                followed by a dot is a prefix of the <i>descendant</i> logger name. A logger is 
                                said to be a <i>parent</i> of a <i>child</i> logger if there are no ancestors 
                                between itself and the descendant logger.
                            </p>
                            
<p>
                                The hierarchy works very much in the same way as the namespace and class 
                                hierarchy in .NET. This is very convenient as we shall soon see.
                            </p>
                        </dd>
                    </dl>
                    
<p>
                        For example, the logger named
                        <span class="code">&quot;Foo.Bar&quot;</span>
                        is a parent of the logger named
                        <span class="code">&quot;Foo.Bar.Baz&quot;</span>. Similarly,
                        <span class="code">&quot;System&quot;</span>
                        is a parent of
                        <span class="code">&quot;System.Text&quot;</span>
                        and an ancestor of
                        <span class="code">&quot;System.Text.StringBuilder&quot;</span>. This naming scheme 
                        should be familiar to most developers.
                    </p>
                    
<p>
                        The <i>root</i> logger resides at the top of the logger hierarchy. It is exceptional 
                        in three ways:
                    </p>
                    
<ol style="list-style-type: decimal">
                        
<li>
                            It always exists</li>
                        
<li>
                            It cannot be retrieved by name</li>
                        
<li>
                            It always has an assigned level</li>
                    </ol>
                    
<p>
                        Loggers are retrieved using the static method from the
                        <span class="code">log4net.LogManager</span>
                        class. The
                        <span class="code">GetLogger</span>
                        methods take the name of the desired logger as a parameter. They are listed 
                        below:
                    </p>
                    
<div class="source">
<pre>
namespace log4net
{
    public class LogManager
    {
        public static ILog GetLogger(string name);
        public static ILog GetLogger(Type type);
    }
}</pre></div>
                    
<p>
                        The
                        <span class="code">GetLogger</span>
                        methods that takes a
                        <span class="code">Type</span>
                        parameter uses the fully qualified type name as the name of the logger to 
                        retrieve.
                    </p>
                    
<p>
                        These
                        <span class="code">GetLogger</span>
                        methods return an
                        <span class="code">ILog</span>
                        interface. That is the representation of the <i>Logger</i> passed back to the 
                        developer. The
                        <span class="code">ILog</span>
                        interface is defined below:
                    </p>
                    
<div class="source">
<pre>
namespace log4net
{
    public interface ILog
    {
        /* Test if a level is enabled for logging */
        bool IsDebugEnabled { get; }
        bool IsInfoEnabled { get; }
        bool IsWarnEnabled { get; }
        bool IsErrorEnabled { get; }
        bool IsFatalEnabled { get; }
        
        /* Log a message object */
        void Debug(object message);
        void Info(object message);
        void Warn(object message);
        void Error(object message);
        void Fatal(object message);
        
        /* Log a message object and exception */
        void Debug(object message, Exception t);
        void Info(object message, Exception t);
        void Warn(object message, Exception t);
        void Error(object message, Exception t);
        void Fatal(object message, Exception t);
        
        /* Log a message string using the System.String.Format syntax */
        void DebugFormat(string format, params object[] args);
        void InfoFormat(string format, params object[] args);
        void WarnFormat(string format, params object[] args);
        void ErrorFormat(string format, params object[] args);
        void FatalFormat(string format, params object[] args);
        
        /* Log a message string using the System.String.Format syntax */
        void DebugFormat(IFormatProvider provider, string format, params object[] args);
        void InfoFormat(IFormatProvider provider, string format, params object[] args);
        void WarnFormat(IFormatProvider provider, string format, params object[] args);
        void ErrorFormat(IFormatProvider provider, string format, params object[] args);
        void FatalFormat(IFormatProvider provider, string format, params object[] args);
    }
}</pre></div>
                    
<p>
                        Loggers <i>may</i> be assigned levels. Levels are instances of the
                        <span class="code">log4net.Core.Level</span>
                        class. The following levels are defined in order of increasing priority:
                    </p>
                    
<ul>
                        
<li>
                            <span class="code">ALL</span>
                        </li>
                        
<li>
                            <span class="code">DEBUG</span>
                        </li>
                        
<li>
                            <span class="code">INFO</span>
                        </li>
                        
<li>
                            <span class="code">WARN</span>
                        </li>
                        
<li>
                            <span class="code">ERROR</span>
                        </li>
                        
<li>
                            <span class="code">FATAL</span>
                        </li>
                        
<li>
                            <span class="code">OFF</span>
                        </li>
                    </ul>
                    
<p>
                        If a given logger is not assigned a level, then it inherits one from its 
                        closest ancestor with an assigned level. More formally:
                    </p>
                    
<dl class="rule">
                        
<dt>Level Inheritance</dt>
                        
<dd>
                            
<p>
                                The <i>inherited level</i> for a given logger <i>X</i>, is equal to the first 
                                non-null level in the logger hierarchy, starting at <i>X</i> and proceeding 
                                upwards in the hierarchy towards the <i>root</i> logger.
                            </p>
                        </dd>
                    </dl>
                    
<p>
                        To ensure that all loggers can eventually inherit a level, the <i>root</i> logger 
                        always has an assigned level. The default value for the <i>root</i> logger is
                        <span class="code">DEBUG</span>.
                    </p>
                    
<p>
                        Below are four tables with various assigned level values and the resulting 
                        inherited levels according to the above rule.
                    </p>
                    
<p> </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Logger name</th>
                                
<th>
                                    Assigned level</th>
                                
<th>
                                    Inherited level</th>
                            </tr>
                            
<tr class="b" align="left">
                                
<td><i>root</i></td>
                                
<td>Proot</td>
                                
<td>Proot</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X</td>
                                
<td>none</td>
                                
<td>Proot</td>
                            </tr>
                            
<tr class="b" align="left">
                                
<td>X.Y</td>
                                
<td>none</td>
                                
<td>Proot</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X.Y.Z</td>
                                
<td>none</td>
                                
<td>Proot</td>
                            </tr>
                        </table>
                    </div>
                    
<p>
                        In <i>Example 1</i> above, only the <i>root</i> logger is assigned a level. This level 
                        value,
                        <span class="code">Proot</span>, is inherited by the other loggers
                        <span class="code">X</span>,
                        <span class="code">X.Y</span>
                        and
                        <span class="code">X.Y.Z</span>.
                    </p>
                    
<p> </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Logger name</th>
                                
<th>
                                    Assigned level</th>
                                
<th>
                                    Inherited level</th>
                            </tr>
                            
<tr class="b" align="left">
                                
<td><i>root</i></td>
                                
<td>Proot</td>
                                
<td>Proot</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X</td>
                                
<td>Px</td>
                                
<td>Px</td>
                            </tr>
                            
<tr class="b" align="left">
                                
<td>X.Y</td>
                                
<td>Pxy</td>
                                
<td>Pxy</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X.Y.Z</td>
                                
<td>Pxyz</td>
                                
<td>Pxyz</td>
                            </tr>
                        </table>
                    </div>
                    
<p>
                        In <i>Example 2</i> above, all loggers have an assigned level value. There is 
                        no need for level inheritance.
                    </p>
                    
<p> </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Logger name</th>
                                
<th>
                                    Assigned level</th>
                                
<th>
                                    Inherited level</th>
                            </tr>
                            
<tr class="b" align="left">
                                
<td><i>root</i></td>
                                
<td>Proot</td>
                                
<td>Proot</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X</td>
                                
<td>Px</td>
                                
<td>Px</td>
                            </tr>
                            
<tr class="b" align="left">
                                
<td>X.Y</td>
                                
<td>none</td>
                                
<td>Px</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X.Y.Z</td>
                                
<td>Pxyz</td>
                                
<td>Pxyz</td>
                            </tr>
                        </table>
                    </div>
                    
<p>
                        In <i>Example 3</i> above, the loggers
                        <i>root</i>,
                        <span class="code">X</span>
                        and
                        <span class="code">X.Y.Z</span>
                        are assigned the levels
                        <span class="code">Proot</span>,
                        <span class="code">Px</span>
                        and
                        <span class="code">Pxyz</span>
                        respectively. The logger
                        <span class="code">X.Y</span>
                        inherits its level value from its parent
                        <span class="code">X</span>.
                    </p>
                    
<p> </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Logger name</th>
                                
<th>
                                    Assigned level</th>
                                
<th>
                                    Inherited level</th>
                            </tr>
                            
<tr class="b" align="left">
                                
<td><i>root</i></td>
                                
<td>Proot</td>
                                
<td>Proot</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X</td>
                                
<td>Px</td>
                                
<td>Px</td>
                            </tr>
                            
<tr class="b" align="left">
                                
<td>X.Y</td>
                                
<td>none</td>
                                
<td>Px</td>
                            </tr>
                            
<tr class="a" align="left">
                                
<td>X.Y.Z</td>
                                
<td>none</td>
                                
<td>Px</td>
                            </tr>
                        </table>
                    </div>
                    
<p>
                        In <i>Example 4</i> above, the loggers <i>root</i> and
                        <span class="code">X</span>
                        and are assigned the levels
                        <span class="code">Proot</span>
                        and
                        <span class="code">Px</span>
                        respectively. The loggers
                        <span class="code">X.Y</span>
                        and
                        <span class="code">X.Y.Z</span>
                        inherits their level value from their nearest parent
                        <span class="code">X</span>
                        having an assigned level.
                    </p>
                    
<p>
                        Logging requests are made by invoking one of the printing methods of a logger 
                        instance (through the <span class="code">log4net.ILog</span>). These printing methods are
                        <span class="code">Debug</span>,
                        <span class="code">Info</span>,
                        <span class="code">Warn</span>,
                        <span class="code">Error</span>, and
                        <span class="code">Fatal</span>.
                    </p>
                    
<p>
                        By definition, the printing method determines the level of a logging request. 
                        For example, if
                        <span class="code">log</span>
                        is a logger instance, then the statement
                        <span class="code">log.Info(&quot;..&quot;)</span>
                        is a logging request of level <span class="code">INFO</span>.
                    </p>
                    
<p>
                        A logging request is said to be <i>enabled</i> if its level is higher than or 
                        equal to the level of its logger. Otherwise, the request is said to be <i>disabled</i>. 
                        A logger without an assigned level will inherit one from the hierarchy. This 
                        rule is summarized below.
                    </p>
                    
<dl class="rule">
                        
<dt>Basic Selection Rule</dt>
                        
<dd>
                            
<p>
                                A log request of level <i>L</i> in a logger with (either assigned or inherited, 
                                whichever is appropriate) level <i>K</i>, is enabled if <i>L &gt;= K</i>.
                            </p>
                        </dd>
                    </dl>
                    
<p>
                        This rule is at the heart of log4net. It assumes that levels are ordered. For 
                        the standard levels, we have
                        <span class="code">DEBUG &lt; INFO &lt; WARN &lt; ERROR &lt; FATAL</span>.
                    </p>
                    
<p>
                        Calling the
                        <span class="code">log4net.LogManager.GetLogger</span>
                        method with the same name will always return a reference to the exact same 
                        logger object.
                    </p>
                    
<p>
                        For example, in:
                    </p>
                    
<div class="source">
<pre>
ILog x = LogManager.GetLogger(&quot;wombat&quot;);
ILog y = LogManager.GetLogger(&quot;wombat&quot;);</pre></div>
                    
<p>
                        <span class="code">x</span>
                        and
                        <span class="code">y</span>
                        refer to <i>exactly</i> the same logger object.
                    </p>
                    
<p>
                        Thus, it is possible to configure a logger and then to retrieve the same 
                        instance somewhere else in the code without passing around references. In 
                        fundamental contradiction to biological parenthood, where parents always 
                        precede their children, log4net loggers can be created and configured in any 
                        order. In particular, a &quot;parent&quot; logger will find and link to its descendants 
                        even if it is instantiated after them.
                    </p>
                    
<p>
                        Configuration of the log4net environment is typically done at application 
                        initialization. The preferred way is by reading a configuration file. This 
                        approach will be discussed shortly.
                    </p>
                    
<p>
                        Log4net makes it easy to name loggers by <i>software component</i>. This can be 
                        accomplished by statically instantiating a logger in each class, with the 
                        logger name equal to the fully qualified name of the class. This is a useful 
                        and straightforward method of defining loggers. As the log output bears the 
                        name of the generating logger, this naming strategy makes it easy to identify 
                        the origin of a log message. However, this is only one possible, albeit common, 
                        strategy for naming loggers. Log4net does not restrict the possible set of 
                        loggers. The developer is free to name the loggers as desired.
                    </p>
                    
<p>
                        Nevertheless, naming loggers after the class where they are located seems to be 
                        the best strategy known so far. It is simple an obvious to the developers where 
                        each log message came from. Most importantly it leverages the design of the 
                        application to produce the design of the logger hierarchy. Hopefully some 
                        thought has gone into the design of the application.
                    </p>
                </div>
                
                <a name="appenders"></a>
<div class="section" id="appenders">
<h2><a name="Appenders"></a>Appenders</h2>
                    
<p>
                        The ability to selectively enable or disable logging requests based on their 
                        logger is only part of the picture. Log4net allows logging requests to print to 
                        multiple destinations. In log4net speak, an output destination is called an <i>appender</i>.
                        Appenders must implement the <span class="code">log4net.Appenders.IAppender</span>
                        interface.
                    </p>
                    
<p>
                        The following appenders are defined in the log4net package:
                    </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Type</th>
                                
<th>
                                    Description</th>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_AdoNetAppender.htm">log4net.Appender.AdoNetAppender</a></td>
                                
<td>
                                    Writes logging events to a database using either prepared statements or stored 
                                    procedures.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_AnsiColorTerminalAppender.htm">log4net.Appender.AnsiColorTerminalAppender</a></td>
                                
<td>
                                    Writes color highlighted logging events to a an ANSI terminal window.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_AspNetTraceAppender.htm">log4net.Appender.AspNetTraceAppender</a></td>
                                
<td>
                                    Writes logging events to the ASP trace context. These can then be rendered at 
                                    the end of the ASP page or on the ASP trace page.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_BufferingForwardingAppender.htm">log4net.Appender.BufferingForwardingAppender</a></td>
                                
<td>
                                    Buffers logging events before forwarding them to child appenders.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_ColoredConsoleAppender.htm">log4net.Appender.ColoredConsoleAppender</a></td>
                                
<td>
                                    Writes logging events to the application's Console. The events may go to either 
                                    the standard our stream or the standard error stream. The events may have configurable
                                    text and background colors defined for each level.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_ConsoleAppender.htm">log4net.Appender.ConsoleAppender</a></td>
                                
<td>
                                    Writes logging events to the application's Console. The events may go to either 
                                    the standard our stream or the standard error stream.
                                </td>
                            </tr>
                            
<tr class="b">
                              
<td><a href="../sdk/html/T_log4net_Appender_DebugAppender.htm">log4net.Appender.DebugAppender</a></td>
                              
<td>
                                Writes logging events to the .NET  system.
                              </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_EventLogAppender.htm">log4net.Appender.EventLogAppender</a></td>
                                
<td>
                                    Writes logging events to the Windows Event Log.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net.Appender_FileAppender.htm">log4net.Appender.FileAppender</a></td>
                                
<td>
                                    Writes logging events to a file in the file system.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_ForwardingAppender.htm">log4net.Appender.ForwardingAppender</a></td>
                                
<td>
                                    Forwards logging events to child appenders.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_LocalSyslogAppender.htm">log4net.Appender.LocalSyslogAppender</a></td>
                                
<td>
                                    Writes logging events to the local syslog service (UNIX only).
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_MemoryAppender.htm">log4net.Appender.MemoryAppender</a></td>
                                
<td>
                                    Stores logging events in an in memory buffer.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_NetSendAppender.htm">log4net.Appender.NetSendAppender</a></td>
                                
<td>
                                    Writes logging events to the Windows Messenger service. These messages are 
                                    displayed in a dialog on a users terminal.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_OutputDebugStringAppender.htm">log4net.Appender.OutputDebugStringAppender</a></td>
                                
<td>
                                    Writes logging events to the debugger. If the application has no 
                                    debugger, the system debugger displays the string. If the application has no 
                                    debugger and the system debugger is not active, the message is ignored.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_RemoteSyslogAppender.htm">log4net.Appender.RemoteSyslogAppender</a></td>
                                
<td>
                                    Writes logging events to a remote syslog service using UDP networking.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_RemotingAppender.htm">log4net.Appender.RemotingAppender</a></td>
                                
<td>
                                    Writes logging events to a remoting sink using .NET remoting.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_RollingFileAppender.htm">log4net.Appender.RollingFileAppender</a></td>
                                
<td>
                                    Writes logging events to a file in the file system. The RollingFileAppender can 
                                    be configured to log to multiple files based upon date or file size 
                                    constraints.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_SmtpAppender.htm">log4net.Appender.SmtpAppender</a></td>
                                
<td>
                                    Sends logging events to an email address.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_SmtpPickupDirAppender.htm">log4net.Appender.SmtpPickupDirAppender</a></td>
                                
<td>
                                    Writes SMTP messages as files into a pickup directory.
                                    These files can then be read and sent by an SMTP agent
                                    such as the IIS SMTP agent.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_TelnetAppender.htm">log4net.Appender.TelnetAppender</a></td>
                                
<td>
                                    Clients connect via Telnet to receive logging events.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Appender_TraceAppender.htm">log4net.Appender.TraceAppender</a></td>
                                
<td>
                                    Writes logging events to the .NET trace system.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Appender_UdpAppender.htm">log4net.Appender.UdpAppender</a></td>
                                
<td>
                                    Sends logging events as connectionless UDP datagrams to a remote host or a 
                                    multicast group using a UdpClient.
                                </td>
                            </tr>
                        </table>
                    </div>
                    
<p>
                        More than one appender can be attached to a logger.
                    </p>
                    
<p>
                        <b>
                            Each enabled logging request for a given logger will be forwarded to all 
                            the appenders in that logger as well as the appenders higher in the hierarchy.
                        </b>
                        In other words, appenders are inherited additively from the logger hierarchy. 
                        For example, if a console appender is added to the <i>root</i> logger, then all 
                        enabled logging requests will at least print on the console. If in addition a 
                        file appender is added to a logger, say <i>X</i>, then enabled logging requests 
                        for <i>X</i> and <i>X</i>'s children will print on a file <i>and</i> on the 
                        console. It is possible to override this default behavior so that appender 
                        accumulation is no longer additive by setting the additivity flag on the logger 
                        to
                        <span class="code">false</span>.
                    </p>
                    
<p>
                        The rules governing appender additivity are summarized below.
                    </p>
                    
<dl class="rule">
                        
<dt>Appender Additivity</dt>
                        
<dd>
                            
<p>
                                The output of a log statement of logger <i>X</i> will go to all the appenders 
                                in <i>X</i> and its ancestors. This is the meaning of the term &quot;appender 
                                additivity&quot;.
                            </p>
                            
<p>
                                However, if an ancestor of logger <i>X</i>, say <i>Y</i>, has the additivity 
                                flag set to
                                <span class="code">false</span>, then <i>X</i>'s output will be directed to all 
                                the appenders in <i>X</i> and it's ancestors up to and including <i>Y</i> but 
                                not the appenders in any of the ancestors of <i>Y</i>.
                            </p>
                            
<p>
                                Loggers have their additivity flag set to
                                <span class="code">true</span>
                                by default.
                            </p>
                        </dd>
                    </dl>
                    
<p>
                        The table below shows an example:
                    </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Logger Name</th>
                                
<th>
                                    Added Appenders</th>
                                
<th>
                                    Additivity Flag</th>
                                
<th>
                                    Output Targets</th>
                                
<th>
                                    Comment</th>
                            </tr>
                            
<tr class="b">
                                
<td><i>root</i></td>
                                
<td>A1</td>
                                
<td>not applicable</td>
                                
<td>A1</td>
                                
<td>There is no default appender attached to <i>root</i>.</td>
                            </tr>
                            
<tr class="a">
                                
<td>x</td>
                                
<td>A-x1, A-x2</td>
                                
<td>true</td>
                                
<td>A1, A-x1, A-x2</td>
                                
<td>Appenders of &quot;x&quot; and <i>root</i>.</td>
                            </tr>
                            
<tr class="b">
                                
<td>x.y</td>
                                
<td>none</td>
                                
<td>true</td>
                                
<td>A1, A-x1, A-x2</td>
                                
<td>Appenders of &quot;x&quot; and <i>root</i>.</td>
                            </tr>
                            
<tr class="a">
                                
<td>x.y.z</td>
                                
<td>A-xyz1</td>
                                
<td>true</td>
                                
<td>A1, A-x1, A-x2, A-xyz1</td>
                                
<td>Appenders in &quot;x.y.z&quot;, &quot;x&quot; and <i>root</i>.</td>
                            </tr>
                            
<tr class="b">
                                
<td>security</td>
                                
<td>A-sec</td>
                                
<td><span class="code">false</span></td>
                                
<td>A-sec</td>
                                
<td>No appender accumulation since the additivity flag is set to
                                    <span class="code">false</span>.</td>
                            </tr>
                            
<tr class="a">
                                
<td>security.access</td>
                                
<td>none</td>
                                
<td>true</td>
                                
<td>A-sec</td>
                                
<td>Only appenders of &quot;security&quot; because the additivity flag in &quot;security&quot; is set 
                                    to
                                    <span class="code">false</span>.</td>
                            </tr>
                        </table>
                    </div>
                </div>
                
                <a name="filters"></a>
<div class="section" id="filters">
<h2><a name="Filters"></a>Filters</h2>
                    
<p>
                        Appenders can filter the events that are delivered to them. The filters can be 
                        specified in the configuration to allow fine control of the events that are 
                        logged through different appenders.
                    </p>
                    
<p>
                        The simplest form of control is to specify a
                        <span class="code">Threshold</span>
                        on the appender. This works by logging only the events that have a level that 
                        is greater than or equal to the threshold.
                    </p>
                    
<p>
                        More complex and custom event filtering can be done using the filter chain 
                        defined on each appender. Filters must implement the
                        <span class="code">log4net.Filter.IFilter</span> interface.
                    </p>
                    
<p>
                        The following filters are defined in the log4net package:
                    </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Type</th>
                                
<th>
                                    Description</th>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Filter_DenyAllFilter.htm">log4net.Filter.DenyAllFilter</a></td>
                                
<td>
                                    Drops all logging events.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Filter_LevelMatchFilter.htm">log4net.Filter.LevelMatchFilter</a></td>
                                
<td>
                                    An exact match to the event's level.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Filter_LevelRangeFilter.htm">log4net.Filter.LevelRangeFilter</a></td>
                                
<td>
                                    Matches against a range of levels.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Filter_LoggerMatchFilter.htm">log4net.Filter.LoggerMatchFilter</a></td>
                                
<td>
                                    Matches against a the start of the logger name.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Filter_PropertyFilter.htm">log4net.Filter.PropertyFilter</a></td>
                                
<td>
                                    Matches a substring from a specific property value.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Filter_StringMatchFilter.htm">log4net.Filter.StringMatchFilter</a></td>
                                
<td>
                                    Matches a substring from the event's message.
                                </td>
                            </tr>
                        </table>
                    </div>
                    
<p>
                        The filters can be configured to either accept or reject the event based upon 
                        the match.
                    </p>
                </div>
                
                <a name="layouts"></a>
<div class="section" id="layouts">
<h2><a name="Layouts"></a>Layouts</h2>
                    
<p>
                        More often than not, users wish to customize not only the output destination 
                        but also the output format. This is accomplished by associating a <i>layout</i> 
                        with an appender. The layout is responsible for formatting the logging request 
                        according to the user's wishes, whereas an appender takes care of sending the 
                        formatted output to its destination. The
                        <span class="code">PatternLayout</span>, part of the standard log4net 
                        distribution, lets the user specify the output format according to conversion 
                        patterns similar to the C language
                        <span class="code">printf</span>
                        function.
                    </p>
                    
<p>
                        For example, the PatternLayout with the conversion pattern
                        <span class="code">&quot;%timestamp [%thread] %-5level %logger - %message%newline&quot;</span>
                        will output something akin to:
                    </p>
                    
<div class="source">
<pre>
176 [main] INFO  Com.Foo.Bar - Located nearest gas station.</pre></div>
                    
<p>
                        The first field is the number of milliseconds elapsed since the start of the 
                        program. The second field is the thread making the log request. The third field 
                        is the level of the log statement. The fourth field is the name of the logger 
                        associated with the log request. The text after the '-' is the message of the 
                        statement.
                    </p>
                    
<p>
                        The following layouts are included in the log4net package:
                    </p>
                    
<div class="table">
                        
<table border="0" class="bodyTable">
                            
<tr class="a">
                                
<th>
                                    Type</th>
                                
<th>
                                    Description</th>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Layout_ExceptionLayout.htm">log4net.Layout.ExceptionLayout</a></td>
                                
<td>
                                    Renders the exception text from the logging 
                                    event.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Layout_PatternLayout.htm">log4net.Layout.PatternLayout</a></td>
                                
<td>
                                    Formats the logging event according to a flexible 
                                    set of formatting flags.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Layout_RawTimeStampLayout.htm">log4net.Layout.RawTimeStampLayout</a></td>
                                
<td>
                                    Extracts the timestamp from the logging event.
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Layout_RawUtcTimeStampLayout.htm">log4net.Layout.RawUtcTimeStampLayout</a></td>
                                
<td>
                                    Extracts the timestamp from the logging event in Universal Time.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Layout_SimpleLayout.htm">log4net.Layout.SimpleLayout</a></td>
                                
<td>
                                    Formats the logging event very simply:
                                    <span class="code">[level] - [message]</span>
                                </td>
                            </tr>
                            
<tr class="a">
                                
<td><a href="../sdk/html/T_log4net_Layout_XmlLayout.htm">log4net.Layout.XmlLayout</a></td>
                                
<td>
                                    Formats the logging event as an XML element.
                                </td>
                            </tr>
                            
<tr class="b">
                                
<td><a href="../sdk/html/T_log4net_Layout_XmlLayoutSchemaLog4j.htm">log4net.Layout.XmlLayoutSchemaLog4j</a></td>
                                
<td>
                                    Formats the logging event as an XML element that
                                    complies with the log4j event dtd.
                                </td>
                            </tr>
                        </table>
                    </div>
                </div>
                
                <a name="renderers"></a>
<div class="section" id="renderers">
<h2><a name="Object_Renderers"></a>Object Renderers</h2>
                    
<p>
                        Just as importantly, log4net will render the content of the log message 
                        according to user specified criteria. For example, if you frequently need to 
                        log
                        <span class="code">Oranges</span>, an object type used in your current project, 
                        then you can register an
                        <span class="code">OrangeRenderer</span>
                        that will be invoked whenever an orange needs to be logged.
                    </p>
                    
<p>
                        Object rendering follows the class hierarchy. For example, assuming oranges are 
                        fruits, if you register an
                        <span class="code">FruitRenderer</span>, all fruits including oranges will be 
                        rendered by the
                        <span class="code">FruitRenderer</span>, unless of course you registered an 
                        orange specific
                        <span class="code">OrangeRenderer</span>.
                    </p>
                    
<p>
                        Object renderers have to implement the
                        <span class="code">log4net.ObjectRenderer.IObjectRenderer</span>
                        interface.
                    </p>
                    
<p>
                        Please note that ObjectRenderers are not used by the <span class="code">DebugFormat</span>,
                        <span class="code">InfoFormat</span>, <span class="code">WarnFormat</span>,
                        <span class="code">ErrorFormat</span> and <span class="code">FatalFormat</span> methods.
                    </p>
                </div>
                
            </div>

        </div>
    

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

		<div class="footer">
							<p>Copyright &copy; 2004-2017 <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>
