<!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 2015-12-05 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache log4net &#x2013; Apache log4net Manual: 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="20151205" />
    <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: 2015-12-05</span>
                  &nbsp;| <span id="projectVersion">Version: 1.2.15</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 &#x2013; 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" id="main">
<h2><a name="Apache_log4net_Manual_-_Configuration"></a>Apache log4net&#x2122; Manual - Configuration</h2>

            <a name="config"></a>
<div class="section" id="config">
<h2><a name="Configuration"></a>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>
<pre class="code">
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>
<pre class="code">
// 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>
<pre class="code">
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" id="attributes">
<h2><a name="Configuration_Attributes"></a>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>
<pre class="code">
// 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>
<pre class="code">
// 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" id="appSettings">
<h2><a name="appSettings"></a>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>
<pre class="code">
<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>
<pre class="code">
&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" id="files">
<h2><a name="Configuration_Files"></a>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" id="dot-config">
<h2><a name="a.config_Files"></a>.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" id="reading">
<h2><a name="Reading_Files_Directly"></a>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" id="syntax">
<h2><a name="Configuration_Syntax"></a>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" id="appenders">
<h2><a name="Appenders"></a>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="../config-examples.html">Example Appender Configuration</a> 
                            document.
                        </p>
                                                
                        <a name="filters"></a>
<div class="section" id="filters">
<h2><a name="Filters"></a>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" id="layouts">
<h2><a name="Layouts"></a>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" id="root">
<h2><a name="Root_Logger"></a>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" id="loggers">
<h2><a name="Loggers"></a>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" id="renderers">
<h2><a name="Renderers"></a>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" id="param">
<h2><a name="Parameters"></a>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" id="extension">
<h2><a name="Extension_Parameters"></a>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" id="new-param">
<h2><a name="Compact_Parameter_Syntax"></a>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-2015
                        <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>
