nicko       2005/06/21 12:11:57

  Modified:    src/Core LoggerManager.cs
  Log:
  Fix for LOG4NET-37. Allow the RepositorySelector type to be sepecified using 
the AppSettings config
  
  Revision  Changes    Path
  1.9       +65 -3     logging-log4net/src/Core/LoggerManager.cs
  
  Index: LoggerManager.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Core/LoggerManager.cs,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- LoggerManager.cs  17 Jan 2005 20:18:43 -0000      1.8
  +++ LoggerManager.cs  21 Jun 2005 19:11:57 -0000      1.9
  @@ -17,7 +17,7 @@
   #endregion

   

   using System;

  -using System.Collections;

  +using System.Configuration;

   using System.Reflection;

   

   using log4net.Util;

  @@ -36,6 +36,13 @@
        /// This class is used by the wrapper managers (e.g. <see 
cref="log4net.LogManager"/>)

        /// to provide access to the <see cref="ILogger"/> objects.

        /// </para>

  +     /// <para>

  +     /// This manager also holds the <see cref="IRepositorySelector"/> that 
is used to

  +     /// lookup and create repositories. The selector can be set either 
programmatically using

  +     /// the <see cref="RepositorySelector"/> property, or by setting the 
<c>log4net.RepositorySelector</c>

  +     /// AppSetting in the applications config file to the fully qualified 
type name of the

  +     /// selector to use. 

  +     /// </para>

        /// </remarks>

        /// <author>Nicko Cadell</author>

        /// <author>Gert Driesen</author>

  @@ -80,7 +87,7 @@
                        }

                        catch(System.Security.SecurityException)

                        {

  -                             LogLog.Debug("LoggerMAnager: Security Exception 
(ControlAppDomain LinkDemand) while trying "+

  +                             LogLog.Debug("LoggerManager: Security Exception 
(ControlAppDomain LinkDemand) while trying "+

                                        "to register Shutdown handler with the 
AppDomain. LoggerManager.Shutdown() "+

                                        "will not be called automatically when 
the AppDomain exits. It must be called "+

                                        "programmatically.");

  @@ -93,7 +100,62 @@
   #if NETCF

                        s_repositorySelector = new 
CompactRepositorySelector(typeof(log4net.Repository.Hierarchy.Hierarchy));

   #else

  -                     s_repositorySelector = new 
DefaultRepositorySelector(typeof(log4net.Repository.Hierarchy.Hierarchy));

  +

  +                     // Look for the RepositorySelector type specified in 
the AppSettings 'log4net.RepositorySelector'

  +                     string appRepositorySelectorTypeName = null;

  +

  +                     try

  +                     {

  +                             appRepositorySelectorTypeName = 
ConfigurationSettings.AppSettings["log4net.RepositorySelector"];

  +                     }

  +                     catch(Exception ex)

  +                     {

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

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

  +                     }

  +

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

  +                     {

  +                             // Resolve the config string into a Type

  +                             Type appRepositorySelectorType = null;

  +                             try

  +                             {

  +                                     appRepositorySelectorType = 
SystemInfo.GetTypeFromString(appRepositorySelectorTypeName, false, true);

  +                             }

  +                             catch(Exception ex)

  +                             {

  +                                     LogLog.Error("LoggerManager: Exception 
while resolving RepositorySelector Type ["+appRepositorySelectorTypeName+"]", 
ex);

  +                             }

  +

  +                             if (appRepositorySelectorType != null)

  +                             {

  +                                     // Create an instance of the 
RepositorySelectorType

  +                                     object appRepositorySelectorObj = null;

  +                                     try

  +                                     {

  +                                             appRepositorySelectorObj = 
Activator.CreateInstance(appRepositorySelectorType);

  +                                     }

  +                                     catch(Exception ex)

  +                                     {

  +                                             LogLog.Error("LoggerManager: 
Exception while creating RepositorySelector 
["+appRepositorySelectorType.FullName+"]", ex);

  +                                     }

  +

  +                                     if (appRepositorySelectorObj != null && 
appRepositorySelectorObj is IRepositorySelector)

  +                                     {

  +                                             s_repositorySelector = 
(IRepositorySelector)appRepositorySelectorObj;

  +                                     }

  +                                     else

  +                                     {

  +                                             LogLog.Error("LoggerManager: 
RepositorySelector Type ["+appRepositorySelectorType.FullName+"] is not an 
IRepositorySelector");

  +                                     }

  +                             }

  +                     }

  +

  +                     // Create the DefaultRepositorySelector if not 
configured above 

  +                     if (s_repositorySelector == null)

  +                     {

  +                             s_repositorySelector = new 
DefaultRepositorySelector(typeof(log4net.Repository.Hierarchy.Hierarchy));

  +                     }

   #endif

                }

   

  
  
  

Reply via email to