| <!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 – 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 ™</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™ 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 "MyApp". |
| <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("Entering application."); |
| Bar bar = new Bar(); |
| bar.DoIt(); |
| log.Info("Exiting application."); |
| } |
| }</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("Did it again!"); |
| } |
| } |
| }</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">"%-4timestamp [%thread] %-5level %logger %ndc - %message%newline"</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("Entering application."); |
| Bar bar = new Bar(); |
| bar.DoIt(); |
| log.Info("Exiting application."); |
| } |
| }</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> |
| <log4net> |
| <!-- A1 is set to be a ConsoleAppender --> |
| <appender name="A1" type="log4net.Appender.ConsoleAppender"> |
| |
| <!-- A1 uses PatternLayout --> |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" /> |
| </layout> |
| </appender> |
| |
| <!-- Set root logger level to DEBUG and its only appender to A1 --> |
| <root> |
| <level value="DEBUG" /> |
| <appender-ref ref="A1" /> |
| </root> |
| </log4net></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> |
| <log4net> |
| <!-- A1 is set to be a ConsoleAppender --> |
| <appender name="A1" type="log4net.Appender.ConsoleAppender"> |
| |
| <!-- A1 uses PatternLayout --> |
| <layout type="log4net.Layout.PatternLayout"> |
| <!-- Print the date in ISO 8601 format --> |
| <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" /> |
| </layout> |
| </appender> |
| |
| <!-- Set root logger level to DEBUG and its only appender to A1 --> |
| <root> |
| <level value="DEBUG" /> |
| <appender-ref ref="A1" /> |
| </root> |
| |
| <!-- Print only messages of level WARN or above in the package Com.Foo --> |
| <logger name="Com.Foo"> |
| <level value="WARN" /> |
| </logger> |
| </log4net></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> |
| <log4net> |
| <appender name="Console" type="log4net.Appender.ConsoleAppender"> |
| <layout type="log4net.Layout.PatternLayout"> |
| <!-- Pattern to output the caller's file name and line number --> |
| <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" /> |
| </layout> |
| </appender> |
| |
| <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> |
| <file value="example.log" /> |
| <appendToFile value="true" /> |
| <maximumFileSize value="100KB" /> |
| <maxSizeRollBackups value="2" /> |
| |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%level %thread %logger - %message%newline" /> |
| </layout> |
| </appender> |
| |
| <root> |
| <level value="DEBUG" /> |
| <appender-ref ref="Console" /> |
| <appender-ref ref="RollingFile" /> |
| </root> |
| </log4net></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="log4net",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 "log4net.Config" |
| overrides the configuration file name (and is |
| considered to be relative to your application's |
| base directory), the setting with the key |
| "log4net.Config.Watch" 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 "TestApp.exe.config" and not |
| monitor it for changes you can override this to |
| use the file "log4net.config" and monitor it |
| instead by adding |
| </p> |
| |
| <div class="syntax"> |
| <div> |
| <pre class="code"> |
| <appSettings> |
| <add key="log4net.Config" value="log4net.config"/> |
| <add key="log4net.Config.Watch" value="True"/> |
| </appSettings> |
| </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> |
| <?xml version="1.0" encoding="utf-8" ?> |
| <configuration> |
| <configSections> |
| <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> |
| </configSections> |
| <log4net> |
| <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> |
| </layout> |
| </appender> |
| <root> |
| <level value="INFO" /> |
| <appender-ref ref="ConsoleAppender" /> |
| </root> |
| </log4net> |
| </configuration></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> |
| <?xml version="1.0" encoding="utf-8" ?> |
| <log4net> |
| <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> |
| </layout> |
| </appender> |
| <root> |
| <level value="INFO" /> |
| <appender-ref ref="ConsoleAppender" /> |
| </root> |
| </log4net></pre></div> |
| |
| <p> |
| Or it may be nested within other elements: |
| </p> |
| |
| <div class="source"> |
| <pre> |
| <?xml version="1.0" encoding="utf-8" ?> |
| <configuration> |
| <configSections> |
| <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> |
| </configSections> |
| <log4net> |
| <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> |
| </layout> |
| </appender> |
| <root> |
| <level value="INFO" /> |
| <appender-ref ref="ConsoleAppender" /> |
| </root> |
| </log4net> |
| </configuration></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"><log4net></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> |
| <log4net> |
| <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> |
| </layout> |
| </appender> |
| <root> |
| <level value="INFO" /> |
| <appender-ref ref="ConsoleAppender" /> |
| </root> |
| </log4net></pre></div> |
| |
| <p> |
| The <span class="code"><log4net></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"><log4net></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"><log4net></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> |
| <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> |
| </layout> |
| </appender></pre></div> |
| |
| |
| <p> |
| The <span class="code"><appender></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"><appender-ref></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"><appender></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"><appender></span> elements. |
| </p> |
| |
| <p> |
| The <span class="code"><filter></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"><filter></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> |
| <filter type="log4net.Filter.LevelRangeFilter"> |
| <levelMin value="INFO" /> |
| <levelMax value="FATAL" /> |
| </filter></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> |
| <filter type="log4net.Filter.StringMatchFilter"> |
| <stringToMatch value="database" /> |
| </filter> |
| <filter type="log4net.Filter.DenyAllFilter" /></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> |
| <filter type="log4net.Filter.StringMatchFilter"> |
| <stringToMatch value="database"/> |
| </filter> |
| <filter type="log4net.Filter.StringMatchFilter"> |
| <stringToMatch value="ldap"/> |
| </filter> |
| <filter type="log4net.Filter.DenyAllFilter" /></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"><appender></span> elements. |
| </p> |
| |
| <p> |
| The <span class="code"><layout></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"><layout></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> |
| <layout type="log4net.Layout.PatternLayout"> |
| <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> |
| </layout></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"><log4net></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> |
| <root> |
| <level value="INFO" /> |
| <appender-ref ref="ConsoleAppender" /> |
| </root></pre></div> |
| |
| |
| <p> |
| The <span class="code"><root></span> element supports no attributes. |
| </p> |
| |
| <p> |
| The <span class="code"><root></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"><log4net></span> element. |
| </p> |
| |
| <p> |
| An example logger: |
| </p> |
| |
| <div class="source"> |
| <pre> |
| <logger name="LoggerName"> |
| <level value="DEBUG" /> |
| <appender-ref ref="ConsoleAppender" /> |
| </logger></pre></div> |
| |
| |
| <p> |
| The <span class="code"><logger></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"><logger></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"><log4net></span> element. |
| </p> |
| |
| <p> |
| An example renderer: |
| </p> |
| |
| <div class="source"> |
| <pre> |
| <renderer renderingClass="MyClass.MyRenderer" renderedClass="MyClass.MyFunkyObject" /></pre></div> |
| |
| |
| <p> |
| The <span class="code"><renderer></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"><renderer></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> |
| <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /></pre></div> |
| |
| |
| <p> |
| The <span class="code"><param></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"><param></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> |
| <param name="evaluator" type="log4net.spi.LevelEvaluator"> |
| <param name="Threshold" value="WARN"/> |
| <param></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> |
| <param name="evaluator" type="log4net.spi.LevelEvaluator"> |
| <param name="Threshold" value="WARN"/> |
| <param></pre></div> |
| |
| <p> |
| may be written as: |
| </p> |
| |
| <div class="source"> |
| <pre> |
| <evaluator type="log4net.spi.LevelEvaluator"> |
| <threshold value="WARN"/> |
| <evaluator></pre></div> |
| </div> |
| </div> |
| </div> |
| |
| </div> |
| |
| </div> |
| |
| |
| </td> |
| </tr> |
| </table> |
| </div> |
| |
| <div class="footer"> |
| <p>Copyright © 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> |