<!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 2015-03-30 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache log4net &#x2013; Apache log4net Manual: Repositories</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="20150330" />
    <meta http-equiv="Content-Language" content="en" />
        <meta name="keywords" content="building log4net, 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: 2015-03-30</span>
                  &nbsp;| <span id="projectVersion">Version: 1.2.13</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 &#x2013; Apache log4net Manual: Repositories
              </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">
                          <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>
                       <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">
            <strong>Repositories</strong>
          </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>
          </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" id="main">
<h2><a name="Apache_log4net_Manual_-_Repositories"></a>Apache log4net&#x2122; Manual - Repositories</h2>
            <a name="repository"></a>
<div class="section" id="repository">
<h2><a name="Logging_Repositories"></a>Logging Repositories</h2>
                
<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>

                <a name="attributes"></a>
<div class="section" id="attributes">
<h2><a name="Attributes"></a>Attributes</h2>
                    
<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>
                </div>
            </div>
        </div>
    

      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">
        <div class="xright">Copyright &#169;                    2004-2015
                        <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>
