nicko       2004/12/08 12:08:12

  Modified:    src/Repository/Hierarchy Hierarchy.cs
  Log:
  Updated GetAppenders() method to supported nested appenders
  
  Revision  Changes    Path
  1.8       +47 -7     logging-log4net/src/Repository/Hierarchy/Hierarchy.cs
  
  Index: Hierarchy.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Repository/Hierarchy/Hierarchy.cs,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Hierarchy.cs      21 Oct 2004 22:15:46 -0000      1.7
  +++ Hierarchy.cs      8 Dec 2004 20:08:12 -0000       1.8
  @@ -372,26 +372,66 @@
                }
   
                /// <summary>
  -             /// Returns all the Appenders that are configured as an Array.
  +             /// Returns all the Appenders that are currently configured
                /// </summary>
  -             /// <returns>All the Appenders</returns>
  +             /// <returns>An array containing all the currently configured 
appenders</returns>
                /// <remarks>
  -             /// <para>Returns all the Appenders that are configured as an 
Array.</para>
  +             /// <para>
  +             /// Returns all the <see cref="log4net.Appender.IAppender"/> 
instances that are currently configured.
  +             /// All the loggers are searched for appenders. The appenders 
may also be containers
  +             /// for appenders and these are also searched for additional 
loggers.
  +             /// </para>
  +             /// <para>
  +             /// The list returned is unordered but does not contain 
duplicates.
  +             /// </para>
                /// </remarks>
                override public log4net.Appender.IAppender[] GetAppenders()
                {
  -                     System.Collections.ArrayList appenders = new 
System.Collections.ArrayList();
  +                     System.Collections.ArrayList appenderList = new 
System.Collections.ArrayList();
  +
  +                     CollectAppenders(appenderList, Root);
   
  -                     appenders.AddRange(Root.Appenders);
                        foreach(Logger logger in GetCurrentLoggers())
                        {
  -                             appenders.AddRange(logger.Appenders);
  +                             CollectAppenders(appenderList, logger);
                        }
   
  -                     return 
(log4net.Appender.IAppender[])appenders.ToArray(typeof(log4net.Appender.IAppender));
  +                     return 
(log4net.Appender.IAppender[])appenderList.ToArray(typeof(log4net.Appender.IAppender));
                }
   
                #endregion Override Implementation of LoggerRepositorySkeleton
  +
  +             /// <summary>
  +             /// Collect the appenders from an <see 
cref="IAppenderAttachable"/>.
  +             /// The appender may also be a container.
  +             /// </summary>
  +             /// <param name="appenderList"></param>
  +             /// <param name="appender"></param>
  +             private static void 
CollectAppender(System.Collections.ArrayList appenderList, 
log4net.Appender.IAppender appender)
  +             {
  +                     if (!appenderList.Contains(appender))
  +                     {
  +                             appenderList.Add(appender);
  +
  +                             if (appender is IAppenderAttachable)
  +                             {
  +                                     CollectAppenders(appenderList, 
(IAppenderAttachable)appender);
  +                             }
  +                     }
  +             }
  +
  +             /// <summary>
  +             /// Collect the appenders from an <see 
cref="IAppenderAttachable"/> container
  +             /// </summary>
  +             /// <param name="appenderList"></param>
  +             /// <param name="container"></param>
  +             private static void 
CollectAppenders(System.Collections.ArrayList appenderList, IAppenderAttachable 
container)
  +             {
  +                     foreach(log4net.Appender.IAppender appender in 
container.Appenders)
  +                     {
  +                             CollectAppender(appenderList, appender);
  +                     }
  +             }
   
                #region Implementation of IBasicRepositoryConfigurator
   
  
  
  

Reply via email to