<?xml version="1.0" ?>
<!--
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.
-->
<document>

    <properties>
        <author email="nicko at apache dot org">Nicko Cadell</author>
        <title>Apache log4net Manual: Plugins</title>
    </properties>

    <meta name="keywords" content="log4net plugins, log4net" />

    <body>
        <section id="main" name="Apache log4net&#x2122; Manual - Plugins">
            <section id="plugins" name="Plugins">
                <p>
                    Plugins are additional modular components that are attached to a logger repository.
                </p>
                <p>
                    Plugins are stored in the <span class="code">PluginMap</span> of an
                    <span class="code">ILoggerRepository</span>. 
                    Plugins are attached to the repository by using the <span class="code">PluginMap.Add</span>
                    method.
                </p>
                <p>
                    The following plugins are included in the log4net package:
                </p>
                <div class="table">
                    <table cellspacing="0">
                        <tr>
                            <th>
                                Type</th>
                            <th>
                                Description</th>
                        </tr>
                        <tr>
                            <td>log4net.Plugin.RemoteLoggingServerPlugin</td>
                            <td>
                                Creates a remote logging sink that can receive logging events from a 
                                <span class="code">RemotingAppender</span>.
                            </td>
                        </tr>
                    </table>
                </div>
                <ul>
                    <li>
                        <h3>RemoteLoggingServerPlugin</h3>
                        <p>
                            Creates a remote logging sink that can receive logging events from a 
                            <span class="code">RemotingAppender</span>.
                        </p>
                        <p>
                            Creates a remoting logging sink. A single
                            parameter must be passed to the constructor that specifies the sink URI. This is a
                            name used to identify the logging sink object published via remoting and must be
                            agreed with the client before communication can take place.
                        </p>
                        <p>
                            Example usage:
                        </p>
                        <source language="C#"><![CDATA[
LogManager.GetRepository().PluginMap.Add(new RemoteLoggingServerPlugin("LoggingSink"));]]></source>
                    </li>
                </ul>

                <section id="attributes" name="Plugin Attributes">
                    <p>
                        Plugins can be configured using the following assembly-level attributes:
                    </p>
                    <ul>
                        <li>
                            <h3>PluginAttribute</h3>
                            <p>
                                Specifies a plugin type to create and attach to the default repository. This attribute 
                                does not allow plugins to be parameterized. The plugin class must have a public default constructor.
                            </p>
                            <p>
                                This attribute may be used as many times as necessary to attach plugins to the repository.
                            </p>
                        </li>
                    </ul>
                </section>
            </section>

        </section>
    </body>
</document>
