<?xml version="1.0" ?>
<!--
Copyright 2004-2005 The Apache Software Foundation

Licensed 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>log4net Manual - Repositories</title>
	</properties>

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

	<body>
		<section id="main" name="log4net Manual - Repositories">
			<sectionMenu name="Contents" />

			<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>
