<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at Apr 12, 2013 -->
<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 Manual: Introduction</title>
    <style type="text/css" media="all">
      @import url("../../css/maven-base.css");
      @import url("../../css/maven-theme.css");
      @import url("../../css/site.css");
    </style>
    <link rel="stylesheet" href="../../css/print.css" type="text/css" media="print" />
      <meta name="author" content="Nicko Cadell" />
    <meta name="Date-Revision-yyyymmdd" content="20130412" />
    <meta http-equiv="Content-Language" content="en" />
        <meta name="keywords" content="log4net manual, log4net" />
        </head>
  <body class="composite">
    <div id="banner">
                                      <a href="../../../" id="bannerLeft">
                                                <img src="../../images/ls-logo.jpg" alt="Apache Logging Services Project" />
                </a>
                    <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
        
                <div class="xleft">
        <span id="publishDate">Last Published: 2013-04-12</span>
                  &nbsp;| <span id="projectVersion">Version: 1.2.12-SNAPSHOT</span>
                          |                           <a href="http://www.apache.org/" class="externalLink" title="Apache">Apache</a>
        &gt;
                          <a href="../../../" title="Logging Services">Logging Services</a>
        &gt;
                          <a href="../.././" title="log4net">log4net</a>
        &gt;
    
        Apache log4net Manual: Introduction
              </div>
            <div class="xright">        
        
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
        
                                <h5>Apache log4net</h5>
                  <ul>
                  <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>
                       <h5>Documentation</h5>
                  <ul>
                  <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>
                       <h5>Manual</h5>
                  <ul>
                  <li class="none">
            <strong>Introduction</strong>
          </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>
                       <h5>Community</h5>
                  <ul>
                  <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>
          </ul>
                       <h5>Development</h5>
                  <ul>
                  <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>
                       <h5>Project Documentation</h5>
                  <ul>
                                                                                                                                                                                                                                                        <li class="collapsed">
                          <a href="../../project-info.html" title="Project Information">Project Information</a>
                  </li>
                                                                    <li class="collapsed">
                          <a href="../../project-reports.html" title="Project Reports">Project Reports</a>
                  </li>
          </ul>
                       <h5>Apache</h5>
                  <ul>
                  <li class="none">
                          <a href="http://www.apache.org/" class="externalLink" title="Home">Home</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/licenses/" class="externalLink" title="License">License</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">Sponsorship</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">Thanks</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/security/" class="externalLink" title="Security">Security</a>
            </li>
                  <li class="none">
                          <a href="http://www.apachecon.com" class="externalLink" title="Conferences">Conferences</a>
            </li>
          </ul>
                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="poweredBy" alt="Built by Maven" src="../../images/logos/maven-feather.png" />
      </a>
                   
        
            </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        <!-- 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"><h2 id="main">Apache log4net&#x2122; Manual - Introduction</h2>
            <a name="overview"></a><div class="section"><h2 id="overview">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"><h2 id="frameworks">Frameworks</h2>
                <p>
                    Log4net is available for several frameworks. For each supported framework an 
                    assembly targeting that framework is built:
                </p>
                <ul>
                    <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 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>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"><h2 id="loggers">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"><h2 id="hierarchy">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"><h2 id="appenders">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/log4net.Appender.AdoNetAppender.html">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/log4net.Appender.AnsiColorTerminalAppender.html">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/log4net.Appender.AspNetTraceAppender.html">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/log4net.Appender.BufferingForwardingAppender.html">log4net.Appender.BufferingForwardingAppender</a></td>
                                <td>
                                    Buffers logging events before forwarding them to child appenders.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Appender.ColoredConsoleAppender.html">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/log4net.Appender.ConsoleAppender.html">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/log4net.Appender.DebugAppender.html">log4net.Appender.DebugAppender</a></td>
                              <td>
                                Writes logging events to the .NET  system.
                              </td>
                            </tr>
                            <tr class="a">
                                <td><a href="../sdk/log4net.Appender.EventLogAppender.html">log4net.Appender.EventLogAppender</a></td>
                                <td>
                                    Writes logging events to the Windows Event Log.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Appender.FileAppender.html">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/log4net.Appender.ForwardingAppender.html">log4net.Appender.ForwardingAppender</a></td>
                                <td>
                                    Forwards logging events to child appenders.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Appender.LocalSyslogAppender.html">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/log4net.Appender.MemoryAppender.html">log4net.Appender.MemoryAppender</a></td>
                                <td>
                                    Stores logging events in an in memory buffer.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Appender.NetSendAppender.html">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/log4net.Appender.OutputDebugStringAppender.html">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/log4net.Appender.RemoteSyslogAppender.html">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/log4net.Appender.RemotingAppender.html">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/log4net.Appender.RollingFileAppender.html">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/log4net.Appender.SmtpAppender.html">log4net.Appender.SmtpAppender</a></td>
                                <td>
                                    Sends logging events to an email address.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Appender.SmtpPickupDirAppender.html">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/log4net.Appender.TelnetAppender.html">log4net.Appender.TelnetAppender</a></td>
                                <td>
                                    Clients connect via Telnet to receive logging events.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Appender.TraceAppender.html">log4net.Appender.TraceAppender</a></td>
                                <td>
                                    Writes logging events to the .NET trace system.
                                </td>
                            </tr>
                            <tr class="a">
                                <td><a href="../sdk/log4net.Appender.UdpAppender.html">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"><h2 id="filters">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/log4net.Filter.DenyAllFilter.html">log4net.Filter.DenyAllFilter</a></td>
                                <td>
                                    Drops all logging events.
                                </td>
                            </tr>
                            <tr class="a">
                                <td><a href="../sdk/log4net.Filter.LevelMatchFilter.html">log4net.Filter.LevelMatchFilter</a></td>
                                <td>
                                    An exact match to the event's level.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Filter.LevelRangeFilter.html">log4net.Filter.LevelRangeFilter</a></td>
                                <td>
                                    Matches against a range of levels.
                                </td>
                            </tr>
                            <tr class="a">
                                <td><a href="../sdk/log4net.Filter.LoggerMatchFilter.html">log4net.Filter.LoggerMatchFilter</a></td>
                                <td>
                                    Matches against a the start of the logger name.
                                </td>
                            </tr>
                            <!-- MDC and NDC replaced by context properties
                            <tr>
                                <td><a href="../sdk/log4net.Filter.MdcFilter.html">log4net.Filter.MdcFilter</a></td>
                                <td>
                                    Matches a substring from a specific <span class="code">MDC</span> value.
                                </td>
                            </tr>
                            <tr>
                                <td><a href="../sdk/log4net.Filter.NdcFilter.html">log4net.Filter.NdcFilter</a></td>
                                <td>
                                    Matches a substring from the event's <span class="code">NDC</span>.
                                </td>
                            </tr> -->
                            <tr class="b">
                                <td><a href="../sdk/log4net.Filter.PropertyFilter.html">log4net.Filter.PropertyFilter</a></td>
                                <td>
                                    Matches a substring from a specific property value.
                                </td>
                            </tr>
                            <tr class="a">
                                <td><a href="../sdk/log4net.Filter.StringMatchFilter.html">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"><h2 id="layouts">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/log4net.Layout.ExceptionLayout.html">log4net.Layout.ExceptionLayout</a></td>
                                <td>
                                    Renders the exception text from the logging 
                                    event.
                                </td>
                            </tr>
                            <tr class="a">
                                <td><a href="../sdk/log4net.Layout.PatternLayout.html">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/log4net.Layout.RawTimeStampLayout.html">log4net.Layout.RawTimeStampLayout</a></td>
                                <td>
                                    Extracts the timestamp from the logging event.
                                </td>
                            </tr>
                            <tr class="a">
                                <td><a href="../sdk/log4net.Layout.RawUtcTimeStampLayout.html">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/log4net.Layout.SimpleLayout.html">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/log4net.Layout.XmlLayout.html">log4net.Layout.XmlLayout</a></td>
                                <td>
                                    Formats the logging event as an XML element.
                                </td>
                            </tr>
                            <tr class="b">
                                <td><a href="../sdk/log4net.Layout.XmlLayoutSchemaLog4j.html">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"><h2 id="renderers">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>
    

      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">
        <div class="xright">Copyright &#169;                    2004-2013
                        <a href="http://www.apache.org">Apache Software Foundation</a>.
                  
        
       Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License, Version 2.0</a>.</div><br />
        <div class="xright">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.</div>
        <div class="clear">
      </div>
    </div>
  </body>
</html>
