nicko       2005/07/11 07:18:46

  Modified:    src/Core DefaultRepositorySelector.cs
  Log:
  Fix for LOG4NET-33. Added code to look for the AppSetting 'log4net.Config' 
when configuring the default repository. If located it is loaded as a URI 
relative to the application base directory.
  
  Revision  Changes    Path
  1.14      +52 -7     logging-log4net/src/Core/DefaultRepositorySelector.cs
  
  Index: DefaultRepositorySelector.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Core/DefaultRepositorySelector.cs,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- DefaultRepositorySelector.cs      17 Jan 2005 20:18:43 -0000      1.13
  +++ DefaultRepositorySelector.cs      11 Jul 2005 14:18:46 -0000      1.14
  @@ -22,10 +22,10 @@
   

   using System;

   using System.Collections;

  -using System.Globalization;

  +using System.Configuration;

   using System.Reflection;

   

  -using log4net.Appender;

  +using log4net.Config;

   using log4net.Util;

   using log4net.Repository;

   

  @@ -113,7 +113,7 @@
                /// <para>

                /// The type of the <see cref="ILoggerRepository"/> created and 
the repository 

                /// to create can be overridden by specifying the <see 
cref="log4net.Config.RepositoryAttribute"/> 

  -             /// attribute on the <paramref name="assembly"/>.

  +             /// attribute on the <paramref name="repositoryAssembly"/>.

                /// </para>

                /// <para>

                /// The default values are to use the <see 
cref="log4net.Repository.Hierarchy.Hierarchy"/> 

  @@ -123,11 +123,11 @@
                /// <para>

                /// The <see cref="ILoggerRepository"/> created will be 
automatically configured using 

                /// any <see cref="log4net.Config.ConfiguratorAttribute"/> 
attributes defined on

  -             /// the <paramref name="assembly"/>.

  +             /// the <paramref name="repositoryAssembly"/>.

                /// </para>

                /// </remarks>

                /// <returns>The <see cref="ILoggerRepository"/> for the 
assembly</returns>

  -             /// <exception cref="ArgumentNullException"><paramref 
name="assembly"/> is <see langword="null" />.</exception>

  +             /// <exception cref="ArgumentNullException"><paramref 
name="repositoryAssembly"/> is <see langword="null" />.</exception>

                public ILoggerRepository GetRepository(Assembly 
repositoryAssembly)

                {

                        if (repositoryAssembly == null)

  @@ -189,7 +189,7 @@
                /// The type of the <see cref="ILoggerRepository"/> created and

                /// the repository to create can be overridden by specifying the

                /// <see cref="log4net.Config.RepositoryAttribute"/> attribute 
on the 

  -             /// <paramref name="assembly"/>.  The default values are to use 
the 

  +             /// <paramref name="repositoryAssembly"/>.  The default values 
are to use the 

                /// <paramref name="repositoryType"/> implementation of the 

                /// <see cref="ILoggerRepository"/> interface and to use the

                /// <see cref="AssemblyName.Name"/> as the name of the 
repository.

  @@ -232,7 +232,7 @@
                /// The type of the <see cref="ILoggerRepository"/> created and

                /// the repository to create can be overridden by specifying the

                /// <see cref="log4net.Config.RepositoryAttribute"/> attribute 
on the 

  -             /// <paramref name="assembly"/>.  The default values are to use 
the 

  +             /// <paramref name="repositoryAssembly"/>.  The default values 
are to use the 

                /// <paramref name="repositoryType"/> implementation of the 

                /// <see cref="ILoggerRepository"/> interface and to use the

                /// <see cref="AssemblyName.Name"/> as the name of the 
repository.

  @@ -638,6 +638,51 @@
                                        configAttr.Configure(assembly, 
repository);

                                }

                        }

  +

  +                     if (repository.Name == DefaultRepositoryName)

  +                     {

  +                             // Try to configure the default repository 
using an AppSettings specified config file

  +                             // Do this even if the repository has been 
configured (or claims to be), this allows overriding

  +                             // of the default config files etc, if that is 
required.

  +

  +                             string repositoryConfigFile = null;

  +

  +                             try

  +                             {

  +                                     repositoryConfigFile = 
ConfigurationSettings.AppSettings["log4net.Config"];

  +                             }

  +                             catch(Exception ex)

  +                             {

  +                                     // If an exception is thrown here then 
it looks like the config file does not parse correctly.

  +                                     
LogLog.Error("DefaultRepositorySelector: Exception while reading 
ConfigurationSettings. Check your .config file is well formed XML.", ex);

  +                             }

  +

  +                             if (repositoryConfigFile != null && 
repositoryConfigFile.Length > 0)

  +                             {

  +                                     // Resolve the config path relative to 
the application base directory URI

  +                                     Uri applicationBaseDirectoryUri = new 
Uri(SystemInfo.ApplicationBaseDirectory);

  +

  +                                     // As we are not going to watch the 
config file it is easiest to just resolve it as a 

  +                                     // URI and pass that to the Configurator

  +                                     Uri repositoryConfigUri = null;

  +                                     try

  +                                     {

  +                                             repositoryConfigUri = new 
Uri(applicationBaseDirectoryUri, repositoryConfigFile);

  +                                     }

  +                                     catch(Exception ex)

  +                                     {

  +                                             
LogLog.Error("DefaultRepositorySelector: Exception while parsing log4net.Config 
file path ["+repositoryConfigFile+"]", ex);

  +                                     }

  +

  +                                     if (repositoryConfigUri != null)

  +                                     {

  +                                             
LogLog.Debug("DefaultRepositorySelector: Loading configuration for default 
repository from AppSettings specified Config URI 
["+repositoryConfigUri.ToString()+"]");

  +

  +                                             // TODO: Support other types of 
configurator

  +                                             
XmlConfigurator.Configure(repository, repositoryConfigUri);

  +                                     }

  +                             }

  +                     }

                }

   

                /// <summary>

  
  
  

Reply via email to