<!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 Sep 9, 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: Configuration</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="20130909" />
    <meta http-equiv="Content-Language" content="en" />
        <meta name="keywords" content="log4net configuration, 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-09-09</span>
                  &nbsp;| <span id="projectVersion">Version: 1.2.12</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: Configuration
              </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">
                          <a href="../../release/manual/introduction.html" title="Introduction">Introduction</a>
            </li>
                  <li class="none">
            <strong>Configuration</strong>
          </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 - Configuration</h2>

            <a name="config"></a><div class="section"><h2 id="config">Configuration</h2>
                <p>
                    Inserting log requests into the application code requires a fair amount of 
                    planning and effort. Observation shows that approximately 4 percent of code is 
                    dedicated to logging. Consequently, even moderately sized applications will 
                    have thousands of logging statements embedded within their code. Given their 
                    number, it becomes imperative to manage these log statements without the need 
                    to modify them manually.
                </p>
                <p>
                    The log4net environment is fully configurable programmatically. However, it is 
                    far more flexible to configure log4net using configuration files. Currently, 
                    configuration files are written in XML.
                </p>
                <p>
                    Let us give a taste of how this is done with the help of an imaginary 
                    application
                    <span class="code">MyApp</span>
                    that uses log4net.
                </p>
                <div class="syntax"><div class="code"><pre>
using Com.Foo;

// Import log4net classes.
<b>using log4net;
using log4net.Config;</b>

public class MyApp 
{
    // Define a static logger variable so that it references the
    // Logger instance named &quot;MyApp&quot;.
    <b>private static readonly</b> ILog log = <b>LogManager.GetLogger(typeof(MyApp));</b>

    static void Main(string[] args) 
    {
        // Set up a simple configuration that logs on the console.
        <b>BasicConfigurator.Configure();</b>

        log.Info(&quot;Entering application.&quot;);
        Bar bar = new Bar();
        bar.DoIt();
        log.Info(&quot;Exiting application.&quot;);
    }
}</pre></div></div>
                <p>
                    <span class="code">MyApp</span>
                    begins by importing log4net related classes. It then defines a static logger 
                    variable with the name
                    <span class="code">MyApp</span>
                    which happens to be the fully qualified name of the class.
                </p>
                <p>
                    <span class="code">MyApp</span>
                    uses the following
                    <span class="code">Bar</span>
                    class:
                </p>
                <div class="syntax"><div class="code"><pre>
// Import log4net classes.
using log4net;

<b>namespace Com.Foo</b>
{
    public class Bar 
    {
        <b>private static readonly</b> ILog log = <b>LogManager.GetLogger(typeof(Bar));</b>

        public void DoIt()
        {
            log.Debug(&quot;Did it again!&quot;);
        }
    }
}</pre></div></div>
                <p>
                    The invocation of the
                    <span class="code">BasicConfigurator.Configure()</span>
                    method creates a rather simple log4net setup. This method is hardwired to add 
                    to the <i>root</i> logger a
                    <span class="code">ConsoleAppender</span>. The output will be formatted using a
                    <span class="code">PatternLayout</span>
                    set to the pattern
                    <span class="code">&quot;%-4timestamp [%thread] %-5level %logger %ndc - %message%newline&quot;</span>.
                </p>
                <p>
                    Note that by default, the <i>root</i> logger is assigned to
                    <span class="code">Level.DEBUG</span>.
                </p>
                <p>
                    The output of <span class="code">MyApp</span> is:
                </p>
                <div class="source"><pre>
0    [main] INFO  MyApp  - Entering application.
36   [main] DEBUG Com.Foo.Bar  - Did it again!
51   [main] INFO  MyApp  - Exiting application.</pre></div>
                <p>
                    As a side note, let me mention that in log4net child loggers link only to their 
                    existing ancestors. In particular, the logger named
                    <span class="code">Com.Foo.Bar</span>
                    is linked directly to the
                    <i>root</i>
                    logger, thereby circumventing the unused
                    <span class="code">Com</span>
                    or
                    <span class="code">Com.Foo</span>
                    loggers. This significantly increases performance and reduces log4net's memory 
                    footprint.
                </p>
                <p>
                    The
                    <span class="code">MyApp</span>
                    class configures log4net by invoking
                    <span class="code">BasicConfigurator.Configure()</span>
                    method. Other classes only need to import the
                    <span class="code">log4net</span>
                    namespace, retrieve the loggers they wish to use, and log away.
                </p>
                <p>
                    The previous example always outputs the same log information. Fortunately, it 
                    is easy to modify
                    <span class="code">MyApp</span>
                    so that the log output can be controlled at run-time. Here is a slightly 
                    modified version.
                </p>
                <div class="syntax"><div class="code"><pre>
using Com.Foo;

// Import log4net classes.
using log4net;
<b>using log4net.Config;</b>

public class MyApp 
{
    private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));

    static void Main(string[] args) 
    {
        // BasicConfigurator replaced with XmlConfigurator.
        <b>XmlConfigurator.Configure(new System.IO.FileInfo(args[0]));</b>

        log.Info(&quot;Entering application.&quot;);
        Bar bar = new Bar();
        bar.DoIt();
        log.Info(&quot;Exiting application.&quot;);
    }
}</pre></div></div>
                <p>
                    This version of
                    <span class="code">MyApp</span>
                    instructs the 
                    <span class="code">XmlConfigurator</span>
                    to parse a configuration file and set up logging accordingly. The path to the 
                    configuration file is specified on the command line.
                </p>
                <p>
                    Here is a sample configuration file that results in exactly same output as the 
                    previous
                    <span class="code">BasicConfigurator</span>
                    based example.
                </p>
                <div class="source"><pre>
&lt;log4net&gt;
    &lt;!-- A1 is set to be a ConsoleAppender --&gt;
    &lt;appender name=&quot;A1&quot; type=&quot;log4net.Appender.ConsoleAppender&quot;&gt;

        &lt;!-- A1 uses PatternLayout --&gt;
        &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
            &lt;conversionPattern value=&quot;%-4timestamp [%thread] %-5level %logger %ndc - %message%newline&quot; /&gt;
        &lt;/layout&gt;
    &lt;/appender&gt;
    
    &lt;!-- Set root logger level to DEBUG and its only appender to A1 --&gt;
    &lt;root&gt;
        &lt;level value=&quot;DEBUG&quot; /&gt;
        &lt;appender-ref ref=&quot;A1&quot; /&gt;
    &lt;/root&gt;
&lt;/log4net&gt;</pre></div>
                <p>
                    Suppose we are no longer interested in seeing the output of any component 
                    belonging to the
                    <span class="code">Com.Foo</span>
                    package. The following configuration file shows one possible way of achieving 
                    this.
                </p>
                <div class="source"><pre>
&lt;log4net&gt;
    &lt;!-- A1 is set to be a ConsoleAppender --&gt;
    &lt;appender name=&quot;A1&quot; type=&quot;log4net.Appender.ConsoleAppender&quot;&gt;

        &lt;!-- A1 uses PatternLayout --&gt;
        &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
            &lt;!-- Print the date in ISO 8601 format --&gt;
            &lt;conversionPattern value=&quot;%date [%thread] %-5level %logger %ndc - %message%newline&quot; /&gt;
        &lt;/layout&gt;
    &lt;/appender&gt;
    
    &lt;!-- Set root logger level to DEBUG and its only appender to A1 --&gt;
    &lt;root&gt;
        &lt;level value=&quot;DEBUG&quot; /&gt;
        &lt;appender-ref ref=&quot;A1&quot; /&gt;
    &lt;/root&gt;
    
    &lt;!-- Print only messages of level WARN or above in the package Com.Foo --&gt;
    &lt;logger name=&quot;Com.Foo&quot;&gt;
        &lt;level value=&quot;WARN&quot; /&gt;
    &lt;/logger&gt;
&lt;/log4net&gt;</pre></div>
                <p>
                    The output of
                    <span class="code">MyApp</span>
                    configured with this file is shown below.
                </p>
                <div class="source"><pre>
2000-09-07 14:07:41,508 [main] INFO  MyApp - Entering application.
2000-09-07 14:07:41,529 [main] INFO  MyApp - Exiting application.</pre></div>
                <p>
                    As the logger
                    <span class="code">Com.Foo.Bar</span>
                    does not have an assigned level, it inherits its level from
                    <span class="code">Com.Foo</span>, which was set to WARN in the configuration 
                    file. The log statement from the
                    <span class="code">Bar.DoIt</span>
                    method has the level DEBUG, lower than the logger level WARN. Consequently,
                    <span class="code">DoIt()</span>
                    method's log request is suppressed.
                </p>
                <p>
                    Here is another configuration file that uses multiple appenders.
                </p>
                <div class="source"><pre>
&lt;log4net&gt;
    &lt;appender name=&quot;Console&quot; type=&quot;log4net.Appender.ConsoleAppender&quot;&gt;
        &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
            &lt;!-- Pattern to output the caller's file name and line number --&gt;
            &lt;conversionPattern value=&quot;%5level [%thread] (%file:%line) - %message%newline&quot; /&gt;
        &lt;/layout&gt;
    &lt;/appender&gt;
    
    &lt;appender name=&quot;RollingFile&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;
        &lt;file value=&quot;example.log&quot; /&gt;
        &lt;appendToFile value=&quot;true&quot; /&gt;
        &lt;maximumFileSize value=&quot;100KB&quot; /&gt;
        &lt;maxSizeRollBackups value=&quot;2&quot; /&gt;

        &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
            &lt;conversionPattern value=&quot;%level %thread %logger - %message%newline&quot; /&gt;
        &lt;/layout&gt;
    &lt;/appender&gt;
    
    &lt;root&gt;
        &lt;level value=&quot;DEBUG&quot; /&gt;
        &lt;appender-ref ref=&quot;Console&quot; /&gt;
        &lt;appender-ref ref=&quot;RollingFile&quot; /&gt;
    &lt;/root&gt;
&lt;/log4net&gt;</pre></div>
                <p>
                    Calling the enhanced <span class="code">MyApp</span> with the this configuration file will output the 
                    following on the console.
                </p>
                <div class="source"><pre>
 INFO [main] (MyApp.cs:16) - Entering application.
DEBUG [main] (Bar.cs:12) - Doing it again!
 INFO [main] (MyApp.cs:19) - Exiting application.</pre></div>
                <p>
                    In addition, as the <i>root</i> logger has been allocated a second appender, output 
                    will also be directed to the
                    <span class="code">example.log</span>
                    file. This file will be rolled over when it reaches 100KB. When roll-over 
                    occurs, the old version of
                    <span class="code">example.log</span>
                    is automatically moved to
                    <span class="code">example.log.1</span>.
                </p>
                <p>
                    Note that to obtain these different logging behaviors we did not need to 
                    recompile code. We could just as easily have logged to an email address, 
                    redirected all
                    <span class="code">Com.Foo</span>
                    output to an NT Event logger, or forwarded logging events to a remote log4net 
                    server, which would log according to local server policy.
                </p>
                <p>
                    For more examples of configuring appenders using the <span class="code">XmlConfigurator</span>
                    see the <a href="../config-examples.html">Example Appender Configuration</a> 
                    document.
                </p>
                
                <a name="attributes"></a><div class="section"><h2 id="attributes">Configuration Attributes</h2>
                    <p>
                        The log4net configuration can be configured using assembly-level attributes rather than
                        specified programmatically.
                    </p>
                    <ul>
                        <li>
                            <b>XmlConfiguratorAttribute</b>
                            <p>
                                The <span class="code">log4net.Config.XmlConfiguratorAttribute</span> Allows the
                                <span class="code">XmlConfigurator</span> to be configured using the following properties:
                            </p>
                            <ul>
                                <li>
                                    <b>ConfigFile</b>
                                    <p>
                                        If specified, this is the filename of the configuration file to use with the
                                        <span class="code">XmlConfigurator</span>. This file path is relative to the 
                                        application base directory (<span class="code">AppDomain.CurrentDomain.BaseDirectory</span>).
                                    </p>
                                    <p>
                                        This property cannot be used in conjunction with the 
                                        <span class="code">ConfigFileExtension</span> property.
                                    </p>
                                </li>
                                <li>
                                    <b>ConfigFileExtension</b>
                                    <p>
                                        If specified, this is the extension for the configuration file. The assembly 
                                        file name is used as the base name with the this extension appended. For example
                                        if the assembly is loaded from the a file <span class="code">TestApp.exe</span>
                                        and the <span class="code">ConfigFileExtension</span> property is set to
                                        <span class="code">log4net</span> then the configuration file name is 
                                        <span class="code">TestApp.exe.log4net</span>. This is equivalent to setting the
                                        <span class="code">ConfigFile</span> property to <span class="code">TestApp.exe.log4net</span>.
                                    </p>
                                    <p>
                                        The path to the configuration file is build by using the application base 
                                        directory (<span class="code">AppDomain.CurrentDomain.BaseDirectory</span>), 
                                        the assembly file name and the configuration file extension.
                                    </p>
                                    <p>
                                        This property cannot be used in conjunction with the 
                                        <span class="code">ConfigFile</span> property.
                                    </p>
                                </li>
                                <li>
                                    <b>Watch</b>
                                    <p>
                                        If this flag is specified and set to <span class="code">true</span>
                                        then the framework will watch the configuration file and will reload the config 
                                        each time the file is modified.
                                    </p>
                                </li>
                            </ul>
                            <p>
                                If neither of the <span class="code">ConfigFile</span> or <span class="code">ConfigFileExtension</span>
                                properties are specified, the application configuration file (e.g. <span class="code">TestApp.exe.config</span>) 
                                will be used as the log4net configuration file.
                            </p>
                            <p>
                                Example usage:
                            </p>
                            <div class="syntax"><div class="code"><pre>
// Configure log4net using the .config file
<b>[assembly: log4net.Config.XmlConfigurator(Watch=true)]</b>
// This will cause log4net to look for a configuration file
// called TestApp.exe.config in the application base
// directory (i.e. the directory containing TestApp.exe)
// The config file will be watched for changes.
                            </pre></div></div>
                            <div class="syntax"><div class="code"><pre>
// Configure log4net using the .log4net file
<b>[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension=&quot;log4net&quot;,Watch=true)]</b>
// This will cause log4net to look for a configuration file
// called TestApp.exe.log4net in the application base
// directory (i.e. the directory containing TestApp.exe)
// The config file will be watched for changes.
                            </pre></div></div>
                            <p>
                                This attribute may only be used once per assembly.
                            </p>
                        </li>
                    </ul>
                    <p>
                        Using attributes can be a clearer method for defining where the application's
                        configuration will be loaded from. However it is worth noting that attributes
                        are purely passive. They are information only. Therefore if you use configuration
                        attributes you must invoke log4net to allow it to read the attributes. A simple
                        call to <span class="code">LogManager.GetLogger</span> will cause the attributes
                        on the calling assembly to be read and processed. <b>Therefore it is imperative
                        to make a logging call as early as possible during the application start-up, and
                        certainly before any external assemblies have been loaded and invoked.</b>
                    </p>
                </div>
                
                <a name="appSettings"></a><div class="section"><h2 id="appSettings">appSettings</h2>
                  <p>
                    If you use <a href="#attributes">attributes</a> to
                    configure log4net, two settings of the
                    <tt>appSettings</tt> section of your
                    application's configuration file can be used to
                    override the values given in your assembly's
                    attributes.
                  </p>
                  <p>
                    The setting with the key &quot;log4net.Config&quot;
                    overrides the configuration file name (and is
                    considered to be relative to your application's
                    base directory), the setting with the key
                    &quot;log4net.Config.Watch&quot; determines whether the file
                    should be monitored for changes.
                  </p>
                  <p>
                    Even though the assembly attribute
                  </p>
                  <div class="syntax"><div class="code"><pre>
<b>[assembly: log4net.Config.XmlConfigurator(Watch=false)]</b>
                  </pre></div></div>
                  <p>
                    would configure your application to use a
                    configuration file &quot;TestApp.exe.config&quot; and not
                    monitor it for changes you can override this to
                    use the file &quot;log4net.config&quot; and monitor it
                    instead by adding
                  </p>
                  <div class="syntax"><div class="code"><pre>
&lt;appSettings&gt;
  &lt;add key=&quot;log4net.Config&quot; value=&quot;log4net.config&quot;/&gt;
  &lt;add key=&quot;log4net.Config.Watch&quot; value=&quot;True&quot;/&gt;
&lt;/appSettings&gt;
                  </pre></div></div>

                  <p>
                    to your application's configuration file.
                  </p>
                </div>

                <a name="files"></a><div class="section"><h2 id="files">Configuration Files</h2>
                    <p>
                        Typically the log4net configuration is specified using a file. This file can
                        be read in one of two ways:
                    </p>
                    <ul>
                        <li>Using the .NET <span class="code">System.Configuration</span> API</li>
                        <li>Reading the file contents directly</li>
                    </ul>
                    
                    <a name="dot-config"></a><div class="section"><h2 id="dot-config">.config Files</h2>
                        <p>    
                            The <span class="code">System.Configuration</span> API is only available if the
                            configuration data is in the application's config file; the file named 
                            <i>MyApp.exe.config</i> or <i>Web.config</i>. Because the <span class="code">System.Configuration</span> 
                            API does not support reloading of the config file the configuration settings 
                            cannot be watched using the <span class="code">log4net.Config.XmlConfigurator.ConfigureAndWatch</span> 
                            methods. The main advantage of using the <span class="code">System.Configuration</span>
                            APIs to read the configuration data is that it requires less permissions than accessing
                            the configuration file directly.
                        </p>
                        <p>
                            The only way to configure an application using the <span class="code">System.Configuration</span>
                            APIs is to call the <span class="code">log4net.Config.XmlConfigurator.Configure()</span> method or
                            the <span class="code">log4net.Config.XmlConfigurator.Configure(ILoggerRepository)</span> method.
                        </p>
                        <p>
                            In order to embed the configuration data in the .config file the section name must be
                            identified to the .NET config file parser using a <span class="code">configSections</span> element.
                            The section must specify the <span class="code">log4net.Config.Log4NetConfigurationSectionHandler</span>
                            that will be used to parse the config section. This type must be fully assembly qualified
                            because it is being loaded by the .NET config file parser not by log4net. The correct
                            assembly name for the log4net assembly must be specified.
                            The following is a simple example configuration file that specifies the correct
                            section handler to use for the log4net section.
                        </p>
                        <div class="source"><pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;configuration&gt;
    &lt;configSections&gt;
        &lt;section name=&quot;log4net&quot; type=&quot;log4net.Config.Log4NetConfigurationSectionHandler, log4net&quot; /&gt;
    &lt;/configSections&gt;
    &lt;log4net&gt;
        &lt;appender name=&quot;ConsoleAppender&quot; type=&quot;log4net.Appender.ConsoleAppender&quot; &gt;
            &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
                &lt;conversionPattern value=&quot;%date [%thread] %-5level %logger [%ndc] - %message%newline&quot; /&gt;
            &lt;/layout&gt;
        &lt;/appender&gt;
        &lt;root&gt;
            &lt;level value=&quot;INFO&quot; /&gt;
            &lt;appender-ref ref=&quot;ConsoleAppender&quot; /&gt;
        &lt;/root&gt;
    &lt;/log4net&gt;
&lt;/configuration&gt;</pre></div>
                        <p>
                            In the above example the <span class="code">log4net</span> assembly is specified.
                            This assembly must be located where the .NET runtime can find it. For example it could
                            be located in the same directory as the application. If the log4net assembly is stored in
                            the GAC then the fully qualified assembly name must be specified including the culture,
                            version and public key.
                        </p>
                        <p>
                            When using the .config file to specify the configuration the section name and 
                            XML element name must be <span class="code">log4net</span>.
                        </p>
                    </div>
                    
                    <a name="reading"></a><div class="section"><h2 id="reading">Reading Files Directly</h2>
                        <p>
                            The XmlConfigurator can directly read any XML file and use it to configure log4net. 
                            This includes the application's .config file; the file named <i>MyApp.exe.config</i> 
                            or <i>Web.config</i>. The only reason not to read the configuration file directly is if the
                            application does not have sufficient permissions to read the file, then the configuration
                            must be loaded using the .NET configuration APIs (see above).
                        </p>
                        <p>
                            The file to read the configuration from can be specified using any of
                            the <span class="code">log4net.Config.XmlConfigurator</span> methods that
                            accept a <span class="code">System.IO.FileInfo</span> object. Because the
                            file system can be monitored for file change notifications the 
                            <span class="code">ConfigureAndWatch</span> methods can be used to monitor
                            the configuration file for modifications and automatically reconfigure log4net.
                        </p>
                        <p>
                            Additionally the <span class="code">log4net.Config.XmlConfiguratorAttribute</span>
                            can be used to specify the file to read the configuration from.
                        </p>
                        <p>
                            The configuration is read from the <span class="code">log4net</span> element
                            in the file. Only one <span class="code">log4net</span> element can be specified
                            in the file but it may be located anywhere in the XML hierarchy. For example it
                            may be the root element:
                        </p>
                        <div class="source"><pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;log4net&gt;
    &lt;appender name=&quot;ConsoleAppender&quot; type=&quot;log4net.Appender.ConsoleAppender&quot; &gt;
        &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
            &lt;conversionPattern value=&quot;%date [%thread] %-5level %logger [%ndc] - %message%newline&quot; /&gt;
        &lt;/layout&gt;
    &lt;/appender&gt;
    &lt;root&gt;
        &lt;level value=&quot;INFO&quot; /&gt;
        &lt;appender-ref ref=&quot;ConsoleAppender&quot; /&gt;
    &lt;/root&gt;
&lt;/log4net&gt;</pre></div>
                        <p>
                            Or it may be nested within other elements:
                        </p>
                        <div class="source"><pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;configuration&gt;
    &lt;configSections&gt;
        &lt;section name=&quot;log4net&quot; type=&quot;System.Configuration.IgnoreSectionHandler&quot; /&gt;
    &lt;/configSections&gt;
    &lt;log4net&gt;
        &lt;appender name=&quot;ConsoleAppender&quot; type=&quot;log4net.Appender.ConsoleAppender&quot; &gt;
            &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
                &lt;conversionPattern value=&quot;%date [%thread] %-5level %logger [%ndc] - %message%newline&quot; /&gt;
            &lt;/layout&gt;
        &lt;/appender&gt;
        &lt;root&gt;
            &lt;level value=&quot;INFO&quot; /&gt;
            &lt;appender-ref ref=&quot;ConsoleAppender&quot; /&gt;
        &lt;/root&gt;
    &lt;/log4net&gt;
&lt;/configuration&gt;</pre></div>
                        <p>
                            The above example shows how the configuration data can be embedded 
                            inside a .config file even though the file is being read directly
                            by log4net. An important note is that the .NET config file parser
                            will throw an exception if it finds an element that has not been
                            registered using the <span class="code">configSections</span> element.
                            Therefore in the above example the <span class="code">log4net</span>
                            section name is registered, but the type specified to handle the
                            section is <span class="code">System.Configuration.IgnoreSectionHandler</span>.
                            This is a built-in class that indicates that another method for reading
                            the config section will be employed.
                        </p>
                    </div>
                    
                </div>
                
                <a name="syntax"></a><div class="section"><h2 id="syntax">Configuration Syntax</h2>
                    <p>
                        log4net includes a configuration reader that parses an XML DOM, the 
                        <span class="code">log4net.Config.XmlConfigurator</span>. This section defines the
                        syntax accepted by the configurator.
                    </p>
                    <p>
                        This is an example of a valid XML configuration. The root element
                        must be <span class="code">&lt;log4net&gt;</span>. Note that this does not mean
                        that this element cannot be embedded in another XML document. See the section above 
                        on <a href="#configuration.files">Configuration Files</a> for more information
                        on how to embed the XmlConfigurator XML in a configuration file.
                    </p>
                    <div class="source"><pre>
&lt;log4net&gt;
    &lt;appender name=&quot;ConsoleAppender&quot; type=&quot;log4net.Appender.ConsoleAppender&quot; &gt;
        &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
            &lt;conversionPattern value=&quot;%date [%thread] %-5level %logger [%ndc] - %message%newline&quot; /&gt;
        &lt;/layout&gt;
    &lt;/appender&gt;
    &lt;root&gt;
        &lt;level value=&quot;INFO&quot; /&gt;
        &lt;appender-ref ref=&quot;ConsoleAppender&quot; /&gt;
    &lt;/root&gt;
&lt;/log4net&gt;</pre></div>
                    <p>
                        The <span class="code">&lt;log4net&gt;</span> element supports the following attributes:
                    </p>
                    <div class="table">
                        <table border="0" class="bodyTable">
                            <colgroup>
                                <col style="text-align: left; white-space: nowrap; width: 7em" />
                                <col style="text-align: left;" />
                            </colgroup>
                            <tr class="a">
                                <th>Attribute</th>
                                <th>Description</th>
                            </tr>
                            <tr class="b">
                                <td>debug</td>
                                <td>
                                    Optional attribute. Value must be either <span class="code">true</span> or <span class="code">false</span>.
                                    The default value is <span class="code">false</span>. Set this attribute to <span class="code">true</span>
                                    to enable internal log4net debugging for this configuration.
                                </td>
                            </tr>
                            <tr class="a">
                                <td>update</td>
                                <td>
                                    Optional attribute. Value must be either <span class="code">Merge</span> or <span class="code">Overwrite</span>.
                                    The default value is <span class="code">Merge</span>. Set this attribute to <span class="code">Overwrite</span>
                                    to reset the configuration of the repository being configured before applying this configuration.
                                </td>
                            </tr>
                            <tr class="b">
                                <td>threshold</td>
                                <td>
                                    Optional attribute. Value must be the name of a level registered on the repository.
                                    The default value is <span class="code">ALL</span>. Set this attribute to limit the messages
                                    that are logged across the whole repository, regardless of the logger that the message is logged to.
                                </td>
                            </tr>
                        </table>
                    </div>
                    <p>
                        The <span class="code">&lt;log4net&gt;</span> element supports the following child elements:
                    </p>
                    <div class="table">
                        <table border="0" class="bodyTable">
                            <colgroup>
                                <col style="text-align: left; white-space: nowrap; width: 7em" />
                                <col style="text-align: left;" />
                            </colgroup>
                            <tr class="a">
                                <th>Element</th>
                                <th>Description</th>
                            </tr>
                            <tr class="b">
                                <td>appender</td>
                                <td>
                                    Zero or more elements allowed. Defines an appender.
                                </td>
                            </tr>
                            <tr class="a">
                                <td>logger</td>
                                <td>
                                    Zero or more elements allowed. Defines the configuration of a logger.
                                </td>
                            </tr>
                            <tr class="b">
                                <td>renderer</td>
                                <td>
                                    Zero or more elements allowed. Defines an object renderer.
                                </td>
                            </tr>
                            <tr class="a">
                                <td>root</td>
                                <td>
                                    Optional element, maximum of one allowed. Defines the configuration of the root logger.
                                </td>
                            </tr>
                            <tr class="b">
                                <td>param</td>
                                <td>
                                    Zero or more elements allowed. Repository specific parameters
                                </td>
                            </tr>
                        </table>
                    </div>
                    
                    <a name="appenders"></a><div class="section"><h2 id="appenders">Appenders</h2>
                        <p>
                            Appenders may only be defined as child elements of the <span class="code">&lt;log4net&gt;</span>
                            element. Each appender must be uniquely named. The implementing type for the appender must be specified.
                        </p>
                        <p>
                            This example shows an appender of type <span class="code">log4net.Appender.ConsoleAppender</span> being
                            defined. The appender will be known as <i>ConsoleAppender</i>.
                        </p>
                        <div class="source"><pre>
&lt;appender name=&quot;ConsoleAppender&quot; type=&quot;log4net.Appender.ConsoleAppender&quot; &gt;
    &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
        &lt;conversionPattern value=&quot;%date [%thread] %-5level %logger [%ndc] - %message%newline&quot; /&gt;
    &lt;/layout&gt;
&lt;/appender&gt;</pre></div>
                        
                        <p>
                            The <span class="code">&lt;appender&gt;</span> element supports the following attributes:
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Attribute</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>name</td>
                                    <td>
                                        Required attribute. Value must be a string name for this appender. The name must be unique
                                        among all the appenders defined in this configuration file. This name is used by the 
                                        <span class="code">&lt;appender-ref&gt;</span> element of a Logger to reference an appender.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>type</td>
                                    <td>
                                        Required attribute. Value must be the type name for this appender. If the appender is
                                        not defined in the log4net assembly this type name must be fully assembly qualified.
                                    </td>
                                </tr>
                            </table>
                        </div>
                        <p>
                            The <span class="code">&lt;appender&gt;</span> element supports the following child elements:
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Element</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>appender-ref</td>
                                    <td>
                                        Zero or more elements allowed. Allows the appender to reference other appenders.
                                        Not supported by all appenders.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>filter</td>
                                    <td>
                                        Zero or more elements allowed. Defines the filters used by this appender.
                                    </td>
                                </tr>
                                <tr class="b">
                                    <td>layout</td>
                                    <td>
                                        Optional element, maximum of one allowed. Defines the layout used by this appender.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>param</td>
                                    <td>
                                        Zero or more elements allowed. Appender specific parameters.
                                    </td>
                                </tr>
                            </table>
                        </div>
                        
                        <p>
                            For examples of configuring appenders see the 
                            <a href="example-config-appender.html">Example Appender Configuration</a> 
                            document.
                        </p>
                                                
                        <a name="filters"></a><div class="section"><h2 id="filters">Filters</h2>
                            <p>
                                Filters elements may only be defined as children of <span class="code">&lt;appender&gt;</span> elements.
                            </p>
                            <p>
                                The <span class="code">&lt;filter&gt;</span> element supports the following attributes:
                            </p>
                            <div class="table">
                                <table border="0" class="bodyTable">
                                    <colgroup>
                                        <col style="text-align: left; white-space: nowrap; width: 7em" />
                                        <col style="text-align: left;" />
                                    </colgroup>
                                    <tr class="a">
                                        <th>Attribute</th>
                                        <th>Description</th>
                                    </tr>
                                    <tr class="b">
                                        <td>type</td>
                                        <td>
                                            Required attribute. Value must be the type name for this filter. If the filter is
                                            not defined in the log4net assembly this type name must be fully assembly qualified.
                                        </td>
                                    </tr>
                                </table>
                            </div>
                            <p>
                                The <span class="code">&lt;filter&gt;</span> element supports the following child elements:
                            </p>
                            <div class="table">
                                <table border="0" class="bodyTable">
                                    <colgroup>
                                        <col style="text-align: left; white-space: nowrap; width: 7em" />
                                        <col style="text-align: left;" />
                                    </colgroup>
                                    <tr class="a">
                                        <th>Element</th>
                                        <th>Description</th>
                                    </tr>
                                    <tr class="b">
                                        <td>param</td>
                                        <td>
                                            Zero or more elements allowed. Filter specific parameters.
                                        </td>
                                    </tr>
                                </table>
                            </div>                            

                            <p>
                                Filters form a chain that the event has to pass through. Any filter along the way can accept the event 
                                and stop processing, deny the event and stop processing, or allow the event on to the next filter. 
                                If the event gets to the end of the filter chain without being denied it is implicitly accepted and will be logged.
                            </p>
                            <div class="source"><pre>
&lt;filter type=&quot;log4net.Filter.LevelRangeFilter&quot;&gt;
    &lt;levelMin value=&quot;INFO&quot; /&gt;
    &lt;levelMax value=&quot;FATAL&quot; /&gt;
&lt;/filter&gt;</pre></div>
                            <p>
                                This filter will deny events that have a level that is lower than <span class="code">INFO</span>
                                or higher than <span class="code">FATAL</span>. 
                                All events between <span class="code">INFO</span> and <span class="code">FATAL</span> will be logged.
                            </p>
                            <p>
                                If we want to only allow messages through that have a specific substring (e.g. 'database') 
                                then we need to specify the following filters:
                            </p>
                            <div class="source"><pre>
&lt;filter type=&quot;log4net.Filter.StringMatchFilter&quot;&gt;
    &lt;stringToMatch value=&quot;database&quot; /&gt;
&lt;/filter&gt;
&lt;filter type=&quot;log4net.Filter.DenyAllFilter&quot; /&gt;</pre></div>
                            <p>
                                The first filter will look for the substring 'database' in the message text of the event. 
                                If the text is found the filter will accept the message and filter processing will stop, 
                                the message will be logged. If the substring is not found the event will be passed to 
                                the next filter to process. If there is no next filter the event would be implicitly 
                                accepted and would be logged. But because we don't want the non matching events to be 
                                logged we need to use a <span class="code">log4net.Filter.DenyAllFilter</span>
                                that will just deny all events that reach it. This filter is only useful at the end of the filter chain.
                            </p>
                            <p>
                                If we want to allow events that have either 'database' or 'ldap' in the message text we can use the following filters:
                            </p>
                            <div class="source"><pre>
&lt;filter type=&quot;log4net.Filter.StringMatchFilter&quot;&gt;
    &lt;stringToMatch value=&quot;database&quot;/&gt;
&lt;/filter&gt;
&lt;filter type=&quot;log4net.Filter.StringMatchFilter&quot;&gt;
    &lt;stringToMatch value=&quot;ldap&quot;/&gt;
&lt;/filter&gt;
&lt;filter type=&quot;log4net.Filter.DenyAllFilter&quot; /&gt;</pre></div>
                        </div>
                        
                        <a name="layouts"></a><div class="section"><h2 id="layouts">Layouts</h2>
                            <p>
                                Layout elements may only be defined as children of <span class="code">&lt;appender&gt;</span> elements.
                            </p>
                            <p>
                                The <span class="code">&lt;layout&gt;</span> element supports the following attributes:
                            </p>
                            <div class="table">
                                <table border="0" class="bodyTable">
                                    <colgroup>
                                        <col style="text-align: left; white-space: nowrap; width: 7em" />
                                        <col style="text-align: left;" />
                                    </colgroup>
                                    <tr class="a">
                                        <th>Attribute</th>
                                        <th>Description</th>
                                    </tr>
                                    <tr class="b">
                                        <td>type</td>
                                        <td>
                                            Required attribute. Value must be the type name for this layout. If the layout is
                                            not defined in the log4net assembly this type name must be fully assembly qualified.
                                        </td>
                                    </tr>
                                </table>
                            </div>
                            <p>
                                The <span class="code">&lt;layout&gt;</span> element supports the following child elements:
                            </p>
                            <div class="table">
                                <table border="0" class="bodyTable">
                                    <colgroup>
                                        <col style="text-align: left; white-space: nowrap; width: 7em" />
                                        <col style="text-align: left;" />
                                    </colgroup>
                                    <tr class="a">
                                        <th>Element</th>
                                        <th>Description</th>
                                    </tr>
                                    <tr class="b">
                                        <td>param</td>
                                        <td>
                                            Zero or more elements allowed. Layout specific parameters.
                                        </td>
                                    </tr>
                                </table>
                            </div>
                            <p>
                                This example shows how to configure a layout that uses the <span class="code">log4net.Layout.PatternLayout</span>.
                            </p>
                            <div class="source"><pre>
&lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
    &lt;conversionPattern value=&quot;%date [%thread] %-5level %logger [%ndc] - %message%newline&quot; /&gt;
&lt;/layout&gt;</pre></div>
                            
                        </div>
                    </div>
                    
                    <a name="root"></a><div class="section"><h2 id="root">Root Logger</h2>
                        <p>
                            Only one root logger element may only be defined and it must be a child of <span class="code">&lt;log4net&gt;</span> element.
                            The root logger is the root of the logger hierarchy. All loggers ultimately inherit from this logger.
                        </p>
                        <p>
                            An example root logger:
                        </p>
                        <div class="source"><pre>
&lt;root&gt;
    &lt;level value=&quot;INFO&quot; /&gt;
    &lt;appender-ref ref=&quot;ConsoleAppender&quot; /&gt;
&lt;/root&gt;</pre></div>
                        
                        <p>
                            The <span class="code">&lt;root&gt;</span> element supports no attributes.
                        </p>
                        <p>
                            The <span class="code">&lt;root&gt;</span> element supports the following child elements:
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Element</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>appender-ref</td>
                                    <td>
                                        Zero or more elements allowed. Allows the logger to reference appenders by name.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>level</td>
                                    <td>
                                        Optional element, maximum of one allowed. Defines the logging level for this logger.
                                        This logger will only accept event that are at this level or above.
                                    </td>
                                </tr>
                                <tr class="b">
                                    <td>param</td>
                                    <td>
                                        Zero or more elements allowed. Logger specific parameters.
                                    </td>
                                </tr>
                            </table>
                        </div>
                    </div>
                    
                    <a name="loggers"></a><div class="section"><h2 id="loggers">Loggers</h2>
                        <p>
                            Logger elements may only be defined as children of the <span class="code">&lt;log4net&gt;</span> element.
                        </p>
                        <p>
                            An example logger:
                        </p>
                        <div class="source"><pre>
&lt;logger name=&quot;LoggerName&quot;&gt;
    &lt;level value=&quot;DEBUG&quot; /&gt;
    &lt;appender-ref ref=&quot;ConsoleAppender&quot; /&gt;
&lt;/logger&gt;</pre></div>
                        
                        <p>
                            The <span class="code">&lt;logger&gt;</span> element supports the following attributes.
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Attribute</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>name</td>
                                    <td>
                                        Required attribute. Value must be the name of the logger.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>additivity</td>
                                    <td>
                                        Optional attribute. Value may be either <span class="code">true</span> or <span class="code">false</span>.
                                        The default value is <span class="code">true</span>. Set this attribute to <span class="code">false</span>
                                        to prevent this logger from inheriting the appenders defined on parent loggers.
                                    </td>
                                </tr>
                            </table>
                        </div>
                        <p>
                            The <span class="code">&lt;logger&gt;</span> element supports the following child elements:
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Element</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>appender-ref</td>
                                    <td>
                                        Zero or more elements allowed. Allows the logger to reference appenders by name.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>level</td>
                                    <td>
                                        Optional element, maximum of one allowed. Defines the logging level for this logger.
                                        This logger will only accept event that are at this level or above.
                                    </td>
                                </tr>
                                <tr class="b">
                                    <td>param</td>
                                    <td>
                                        Zero or more elements allowed. Logger specific parameters.
                                    </td>
                                </tr>
                            </table>
                        </div>
                    </div>
                    
                    <a name="renderers"></a><div class="section"><h2 id="renderers">Renderers</h2>
                        <p>
                            Renderer elements may only be defined as children of the <span class="code">&lt;log4net&gt;</span> element.
                        </p>
                        <p>
                            An example renderer:
                        </p>
                        <div class="source"><pre>
&lt;renderer renderingClass=&quot;MyClass.MyRenderer&quot; renderedClass=&quot;MyClass.MyFunkyObject&quot; /&gt;</pre></div>
                        
                        <p>
                            The <span class="code">&lt;renderer&gt;</span> element supports the following attributes.
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Attribute</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>renderingClass</td>
                                    <td>
                                        Required attribute. Value must be the type name for this renderer. If the type is
                                        not defined in the log4net assembly this type name must be fully assembly qualified.
                                        This is the type of the object that will take responsibility for rendering the
                                        <i>renderedClass</i>.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>renderedClass</td>
                                    <td>
                                        Required attribute. Value must be the type name for the target type for this renderer. If the type is
                                        not defined in the log4net assembly this type name must be fully assembly qualified.
                                        This is the name of the type that this renderer will render.
                                    </td>
                                </tr>
                            </table>
                        </div>
                        <p>
                            The <span class="code">&lt;renderer&gt;</span> element supports no child elements.
                        </p>
                    </div>
                    
                    <a name="param"></a><div class="section"><h2 id="param">Parameters</h2>
                        <p>
                            Parameter elements may be children of many elements. See the specific elements above for details.
                        </p>
                        <p>
                            An example param:
                        </p>
                        <div class="source"><pre>
&lt;param name=&quot;ConversionPattern&quot; value=&quot;%date [%thread] %-5level %logger [%ndc] - %message%newline&quot; /&gt;</pre></div>
                        
                        <p>
                            The <span class="code">&lt;param&gt;</span> element supports the following attributes.
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Attribute</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>name</td>
                                    <td>
                                        Required attribute. Value must be the name of the parameter to set on the parent object.
                                    </td>
                                </tr>
                                <tr class="a">
                                    <td>value</td>
                                    <td>
                                        Optional attribute. One of <i>value</i> or <i>type</i> attributes must be specified.
                                        The value of this attribute is a string that can be converted to the value of the
                                        parameter.
                                    </td>
                                </tr>
                                <tr class="b">
                                    <td>type</td>
                                    <td>
                                        Optional attribute. One of <i>value</i> or <i>type</i> attributes must be specified.
                                        The value of this attribute is a type name to create and set as the value of the
                                        parameter. If the type is not defined in the log4net assembly this type name must 
                                        be fully assembly qualified.
                                    </td>
                                </tr>
                            </table>
                        </div>
                        <p>
                            The <span class="code">&lt;param&gt;</span> element supports the following child elements:
                        </p>
                        <div class="table">
                            <table border="0" class="bodyTable">
                                <colgroup>
                                    <col style="text-align: left; white-space: nowrap; width: 7em" />
                                    <col style="text-align: left;" />
                                </colgroup>
                                <tr class="a">
                                    <th>Element</th>
                                    <th>Description</th>
                                </tr>
                                <tr class="b">
                                    <td>param</td>
                                    <td>
                                        Zero or more elements allowed. Parameter specific parameters.
                                    </td>
                                </tr>
                            </table>
                        </div>
                        <p>
                            An example param that uses nested param elements:
                        </p>
                        <div class="source"><pre>
&lt;param name=&quot;evaluator&quot; type=&quot;log4net.spi.LevelEvaluator&quot;&gt;
    &lt;param name=&quot;Threshold&quot; value=&quot;WARN&quot;/&gt;
&lt;param&gt;</pre></div>

                        <a name="extension"></a><div class="section"><h2 id="extension">Extension Parameters</h2>
                            <p>
                                Configuration parameters map directly to writable properties on an object.
                                The properties available depend on the actual type of the object being
                                configured. The log4net SDK documentation contains the API reference for
                                all the components included in the log4net assembly.
                            </p>
                            <p>
                                For 3rd party components please see their relevant API reference for 
                                details of the properties available.
                            </p>
                        </div>

                        <a name="new-param"></a><div class="section"><h2 id="new-param">Compact Parameter Syntax</h2>
                            <p>
                                All parameters may alternately be specified using the parameter name as the element name
                                rather than using the <i>param</i> element and <i>name</i> attribute.
                            </p>
                            <p>
                                For example a param:
                            </p>
                            <div class="source"><pre>
&lt;param name=&quot;evaluator&quot; type=&quot;log4net.spi.LevelEvaluator&quot;&gt;
    &lt;param name=&quot;Threshold&quot; value=&quot;WARN&quot;/&gt;
&lt;param&gt;</pre></div>
                            <p>
                                may be written as:
                            </p>
                            <div class="source"><pre>
&lt;evaluator type=&quot;log4net.spi.LevelEvaluator&quot;&gt;
    &lt;threshold value=&quot;WARN&quot;/&gt;
&lt;evaluator&gt;</pre></div>
                        </div>
                    </div>
                </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>
