<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at Sep 9, 2013 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>
        Apache log4net: Examples</title>
    <style type="text/css" media="all">
      @import url("../css/maven-base.css");
      @import url("../css/maven-theme.css");
      @import url("../css/site.css");
    </style>
    <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
      <meta name="author" content="Nicko Cadell" />
    <meta name="Date-Revision-yyyymmdd" content="20130909" />
    <meta http-equiv="Content-Language" content="en" />
        <meta name="keywords" content="log4net examples, log4net" />
        </head>
  <body class="composite">
    <div id="banner">
                                      <a href="../../" id="bannerLeft">
                                                <img src="../images/ls-logo.jpg" alt="Apache Logging Services Project" />
                </a>
                    <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
        
                <div class="xleft">
        <span id="publishDate">Last Published: 2013-09-09</span>
                  &nbsp;| <span id="projectVersion">Version: 1.2.12</span>
                          |                           <a href="http://www.apache.org/" class="externalLink" title="Apache">Apache</a>
        &gt;
                          <a href="../../" title="Logging Services">Logging Services</a>
        &gt;
                          <a href=".././" title="log4net">log4net</a>
        &gt;
    
        Apache log4net: Examples
              </div>
            <div class="xright">        
        
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
        
                                <h5>Apache log4net</h5>
                  <ul>
                  <li class="none">
                          <a href="../index.html" title="About">About</a>
            </li>
                  <li class="none">
                          <a href="../download_log4net.cgi" title="Download">Download</a>
            </li>
                  <li class="none">
                          <a href="../release/release-notes.html" title="Release Notes">Release Notes</a>
            </li>
                  <li class="none">
                          <a href="../license.html" title="License">License</a>
            </li>
          </ul>
                       <h5>Documentation</h5>
                  <ul>
                  <li class="none">
                          <a href="../release/features.html" title="Features">Features</a>
            </li>
                  <li class="none">
                          <a href="../release/framework-support.html" title="Supported Frameworks">Supported Frameworks</a>
            </li>
                  <li class="none">
            <strong>Example Apps</strong>
          </li>
                  <li class="none">
                          <a href="../release/config-examples.html" title="Config Examples">Config Examples</a>
            </li>
                  <li class="none">
                          <a href="../release/building.html" title="Building">Building</a>
            </li>
                  <li class="none">
                          <a href="../release/faq.html" title="FAQ">FAQ</a>
            </li>
                  <li class="none">
                          <a href="../release/howto/index.html" title="How Tos">How Tos</a>
            </li>
                  <li class="none">
                          <a href="../release/sdk/index.html" title="SDK Reference">SDK Reference</a>
            </li>
          </ul>
                       <h5>Manual</h5>
                  <ul>
                  <li class="none">
                          <a href="../release/manual/introduction.html" title="Introduction">Introduction</a>
            </li>
                  <li class="none">
                          <a href="../release/manual/configuration.html" title="Configuration">Configuration</a>
            </li>
                  <li class="none">
                          <a href="../release/manual/contexts.html" title="Contexts">Contexts</a>
            </li>
                  <li class="none">
                          <a href="../release/manual/plugins.html" title="Plugins">Plugins</a>
            </li>
                  <li class="none">
                          <a href="../release/manual/repositories.html" title="Repositories">Repositories</a>
            </li>
                  <li class="none">
                          <a href="../release/manual/internals.html" title="Internals">Internals</a>
            </li>
          </ul>
                       <h5>Community</h5>
                  <ul>
                  <li class="none">
                          <a href="../mail-lists.html" title="Mailing Lists">Mailing Lists</a>
            </li>
                  <li class="none">
                          <a href="../issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
            </li>
          </ul>
                       <h5>Development</h5>
                  <ul>
                  <li class="none">
                          <a href="../source-repository.html" title="Repository">Repository</a>
            </li>
                  <li class="none">
                          <a href="../integration.html" title="Continuous Integration">Continuous Integration</a>
            </li>
          </ul>
                       <h5>Project Documentation</h5>
                  <ul>
                                                                                                                                                                                                                                                        <li class="collapsed">
                          <a href="../project-info.html" title="Project Information">Project Information</a>
                  </li>
                                                                    <li class="collapsed">
                          <a href="../project-reports.html" title="Project Reports">Project Reports</a>
                  </li>
          </ul>
                       <h5>Apache</h5>
                  <ul>
                  <li class="none">
                          <a href="http://www.apache.org/" class="externalLink" title="Home">Home</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/licenses/" class="externalLink" title="License">License</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">Sponsorship</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">Thanks</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/security/" class="externalLink" title="Security">Security</a>
            </li>
                  <li class="none">
                          <a href="http://www.apachecon.com" class="externalLink" title="Conferences">Conferences</a>
            </li>
          </ul>
                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="poweredBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
      </a>
                   
        
            </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        <!-- Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. 
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with 
the License. You may obtain a copy of the License at

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

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

    
        <a name="main"></a><div class="section"><h2 id="main">Apache log4net&#x2122; Examples</h2>
        
            <a name="overview"></a><div class="section"><h2 id="overview">Overview</h2>
                <p>
                    <b>The following examples are only available in the log4net source download, not
                    on-line. To obtain the examples <a href="../download.html">download</a> the log4net source release.
                    </b>
                </p>
            </div>
            
            <a name="building"></a><div class="section"><h2 id="building">Building Examples</h2>
                <a name="building-1"></a><div class="section"><h2 id="building-1">Building An Example</h2>
                    <p>
                        A single example can be build by running <span class="code">nant</span> from
                        the example directory.
                    </p>
                    <p>
                        For example running <span class="code">nant</span> in the 
                        <span class="code">examples\net\1.0\Tutorials\ConsoleApp\cs</span> directory
                        will build the C# version of the Microsoft&#xae; .NET 1.0 ConsoleApp example.
                    </p>
                    <p>
                        <span class="code">nant</span> can be run in any directory containing a
                        <span class="code">nant.build</span> file. The typical behavior of the build file
                        is to build all projects under the current directory.
                    </p>
                    <p>
                        For example running <span class="code">nant</span> in the 
                        <span class="code">examples\net\1.1</span> directory
                        will build all the examples for the .NET 1.1 platform.
                    </p>
                </div>
                
                <a name="building-all"></a><div class="section"><h2 id="building-all">Building All Examples</h2>
                    <p>
                        To build all the examples either run <span class="code">nant</span> in the 
                        <span class="code">examples</span> directory or you can specify the
                        <span class="code">compile-examples</span> target to the main log4net nant build.
                    </p>
                </div>
                
                <a name="building-vsnet"></a><div class="section"><h2 id="building-vsnet">Visual Studio .NET</h2>
                    <p>
                        There are Visual Studio .NET 2002 project files for the .NET 1.0 framework.
                        The solution files for C# and VB are in the examples\net\1.0
                        folder.
                    </p>
                    <p>
                        For the Managed C++ project there is a Visual Studio .NET 2003 project file 
                        in the examples\net\1.1 folder.
                    </p>
                </div>
            </div>
            
            <a name="examples"></a><div class="section"><h2 id="examples">Examples</h2>
            
                <a name="consoleapp"></a><div class="section"><h2 id="consoleapp">Tutorial - ConsoleApp</h2>
                    <p>
                        ConsoleApp shows how to write a simple console application that initializes 
                        logging and logs various events.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>MONO 1.0</b>: 
                            C#
                        </li>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#, 
                            VB
                        </li>
                        <li>
                            <b>.NET 1.1</b>: 
                            C++, 
                            JScript.NET
                        </li>
                        <li>
                            <b>.NET Compact Framework 1.0</b>: 
                            C#, 
                            VB
                        </li>
                        <li>
                            <b>SSCLI 1.0</b>: 
                            JScript.NET
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">ConsoleApp.exe</span> from the build output directory.
                    </p>
                </div>
                
                <a name="webapp"></a><div class="section"><h2 id="webapp">Tutorial - WebApp</h2>
                    <p>
                        ConsoleApp shows how to write a simple ASP.NET web application that initializes 
                        logging and logs various events.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#, 
                            VB
                        </li>
                    </ul>
                    <p>
                        To run this example you need to have an ASP.NET container application to
                        host the web application, for example IIS. In IIS create a new virtual
                        directory pointing to the WebApp src directory. Configure IIS to recognize
                        this virtual directory as an application. Open up a web browser, navigate to
                        the virtual directory and to the <span class="code">WebForm1.aspx</span> page within it.
                    </p>
                </div>
                
                <a name="remotingclient"></a><div class="section"><h2 id="remotingclient">Remoting - RemotingClient</h2>
                    <p>
                        The RemotingClient application is a simple console application that configures
                        log4net with the RemotingAppender. This appender will attempt to deliver the
                        logging events to a remoting listener. This example should be run in conjunction 
                        with the RemotingServer.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">RemotingClient.exe</span> from the build output directory.
                    </p>
                </div>
                
                <a name="remotingserver"></a><div class="section"><h2 id="remotingserver">Remoting - RemotingServer</h2>
                    <p>
                        The RemotingServer application is a simple console application that listens for
                        logging events from a remote RemotingAppender and then logs them through the
                        local log4net instance. This example should be run in conjunction 
                        with the RemotingClient.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">RemotingServer.exe</span> from the build output directory.
                        While this process is running execute the <span class="code">RemotingClient.exe</span> program on
                        the same machine. The logging events from the client are transferred to the server.
                    </p>
                </div>
                
                <a name="rep-simple"></a><div class="section"><h2 id="rep-simple">Repository - SimpleModule</h2>
                    <p>
                        The SimpleModule is a class library that is intended to be used as part of
                        the SimpleApp example,
                        This class library uses the <span class="code">log4net.Config.Repository</span>
                        attribute to create a separate configuration space from other assemblies.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>MONO 1.0</b>: 
                            C#
                        </li>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#, 
                            VB
                        </li>
                        <li>
                            <b>.NET 1.1</b>: 
                            JScript.NET
                        </li>
                        <li>
                            <b>SSCLI 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        This library is intended to be used as part of the SimpleApp example.
                    </p>
                </div>
                
                <a name="rep-shared"></a><div class="section"><h2 id="rep-shared">Repository - SharedModule</h2>
                    <p>
                        The SharedModule is a class library that is intended to be used as part of
                        the SimpleApp example,
                        This class library uses log4net but does not attempt to configure logging.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>MONO 1.0</b>: 
                            C#
                        </li>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#, 
                            VB
                        </li>
                        <li>
                            <b>.NET 1.1</b>: 
                            JScript.NET
                        </li>
                        <li>
                            <b>SSCLI 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        This library is intended to be used as part of the SimpleApp example.
                    </p>
                </div>
                
                <a name="rep-app"></a><div class="section"><h2 id="rep-app">Repository - SimpleApp</h2>
                    <p>
                        The SimpleApp example uses the SimpleModule and SharedModule to demonstrate
                        the ways in which multiple assemblies within the same process may be 
                        separately configured.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>MONO 1.0</b>: 
                            C#
                        </li>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#, 
                            VB
                        </li>
                        <li>
                            <b>.NET 1.1</b>: 
                            JScript.NET
                        </li>
                        <li>
                            <b>SSCLI 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">SimpleApp.exe</span> from the build output directory.
                    </p>
                </div>
                
                <a name="eventidlogapp"></a><div class="section"><h2 id="eventidlogapp">Extensibility - EventIDLogApp</h2>
                    <p>
                        The EventIDLogApp example demonstrates using the log4net.Ext.EventID extension.
                        The extension needs to be built separately from the 
                        <span class="code">extensions\net\1.0\log4net.Ext.EventID</span> directory.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">EventIDLogApp.exe</span> from the build output directory.
                    </p>
                </div>
                
                <a name="tracelogapp"></a><div class="section"><h2 id="tracelogapp">Extensibility - TraceLogApp</h2>
                    <p>
                        The TraceLogApp example demonstrates using the log4net.Ext.Trace extension.
                        The extension needs to be built separately from the 
                        <span class="code">extensions\net\1.0\log4net.Ext.Trace</span> directory.
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">TraceLogApp.exe</span> from the build output directory.
                    </p>
                </div>
                
                <a name="sampleappenders"></a><div class="section"><h2 id="sampleappenders">SampleAppenders</h2>
                    <p>
                        This project includes the following example appenders.
                    </p>
                    <ul>
                        <li>
                            AsyncAppender
                        </li>
                        <li>
                            FastDbAppender
                        </li>
                        <li>
                            FireEventAppender
                        </li>
                        <li>
                            MessageBoxAppender
                        </li>
                        <li>
                            MessageObjectExpanderAppender
                        </li>
                        <li>
                            MsmqAppender
                        </li>
                        <li>
                            PatternFileAppender
                        </li>
                        <li>
                            SimpleSmtpAppender
                        </li>
                    </ul>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">SampleAppendersApp.exe</span> from the build output directory.
                    </p>
                </div>
                
                <a name="samplelayouts"></a><div class="section"><h2 id="samplelayouts">SampleLayouts</h2>
                    <p>
                        This project includes the following example layouts.
                    </p>
                    <ul>
                        <li>
                            ForwardingLayout
                        </li>
                        <li>
                            LineWrappingLayout
                        </li>
                    </ul>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                        To run this example execute <span class="code">SampleLayoutsApp.exe</span> from the build output directory.
                    </p>
                </div>                
                
                <a name="perf-notlogging"></a><div class="section"><h2 id="perf-notlogging">Performance - NotLogging</h2>
                    <p>
                        The NotLogging example benchmarks the performance of log4net logging statements in
                        user code in various scenarios including when logging is disabled. 
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>MONO 1.0</b>: 
                            C#
                        </li>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#, 
                            VB
                        </li>
                    </ul>
                    <p>
                    </p>
                </div>
                
                <a name="wmiappender"></a><div class="section"><h2 id="wmiappender">WmiAppender</h2>
                    <p>
                        The WmiAppender sample shows an example appender that fires events through
                        Windows Management Instrumentation. 
                    </p>
                    <p>
                        This example is available for the following platforms and languages. If a version
                        is not available for your chosen platform and language combination then select the
                        nearest platform for the appropriate language.
                    </p>
                    <ul>
                        <li>
                            <b>.NET 1.0</b>: 
                            C#
                        </li>
                    </ul>
                    <p>
                    </p>
                </div>
                
            </div>
            
        </div>
    

      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">
        <div class="xright">Copyright &#169;                    2004-2013
                        <a href="http://www.apache.org">Apache Software Foundation</a>.
                  
        
       Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License, Version 2.0</a>.</div><br />
        <div class="xright">Apache log4net, Apache, log4net, the Apache feather logo, the Apache Logging Services project logo and the Built by Maven logo are trademarks of The Apache Software Foundation.</div>
        <div class="clear">
      </div>
    </div>
  </body>
</html>
