<?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: Repositories</title>
    </properties>

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

    <body>
        <section id="main" name="Apache log4net&#x2122; Manual - Repositories">
            <section id="repository" name="Logging Repositories">
                <p>
                    Logging repositories are considered advanced functionality. The default behavior
                    should be sufficient for most users.
                </p>
                <p>
                    Log4net supports logging repositories. A repository is uniquely named. 
                    Each repository is a (<span class="code">ILoggerRepository</span>).
                    Multiple assemblies can link to the same repository.
                </p>
                <p>
                    By default there is a single logging repository per process (more precisely per AppDomain). This extends
                    across all assemblies loaded into the process and allows them to all share a
                    single configuration. The configuration of the repository only needs to be done once,
                    typically in the entry point to the application, either programmatically or using 
                    a configuration attribute.
                </p>
                <p>
                    Named logging repositories can be created using the <span class="code">LogManager.CreateRepository</span>
                    method. The repository for can be retrieved using the 
                    <span class="code">LogManager.GetRepository</span> method.
                    A repository created in this way will need to be configured programmatically.
                </p>

                <section id="attributes" name="Attributes">
                    <p>
                        An assembly may choose to utilize a named logging repository rather than the default repository.
                        This completely separates the logging for the assembly from the rest of the application.
                        This can be very useful to component developers that wish to use log4net for their
                        components but do not want to require that all the applications that use their
                        component are aware of log4net. It also means that their debugging configuration is
                        separated from the applications configuration. The assembly should specify the
                        <span class="code">RepositoryAttribute</span> to set its logging repository.
                    </p>
                    <p>
                        The log4net logging repositories can be configured using the following assembly-level 
                        attributes:
                    </p>
                    <ul>
                        <li>
                            <b>AliasRepositoryAttribute</b>
                            <p>
                                Specifies a named repository to use as this assembly's repository.
                            </p>
                            <p>
                                An assembly's logger repository is defined by its
                                <span class="code">RepositoryAttribute</span>, however this can be overridden by an 
                                assembly loaded before the target assembly.
                            </p>
                            <p>
                                An assembly can alias another assembly's repository by specifying 
                                this attribute with the name of the target repository.
                            </p>
                            <p>
                                This attribute may be used as many times as necessary to alias all the required 
                                repositories.
                            </p>
                        </li>
                        <li>
                            <b>RepositoryAttribute</b>
                            <p>
                                Specifies the logging repository for the assembly.
                            </p>
                            <p>
                                Assemblies are mapped to logging repositories. This attribute controls the configuration of the repository. The
                                <span class="code">Name</span> property specifies the name of the repository 
                                for this assembly. The <span class="code">RepositoryType</span>
                                property specifies the type of the repository object to create for the assembly. 
                                If this attribute is not specified and a <span class="code">Name</span>
                                is not specified then the assembly will be part of the default shared logging 
                                repository.
                            </p>
                            <p>
                                This attribute may only be used once per assembly.
                            </p>
                        </li>
                    </ul>
                </section>
            </section>
        </section>
    </body>
</document>
