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

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

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

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

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

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

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

    
        <a name="main"></a>
<div class="section" id="main">
<h2><a name="Apache_log4net_Manual_-_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>
    

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

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