You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2004/12/08 21:08:12 UTC
cvs commit: logging-log4net/src/Repository/Hierarchy Hierarchy.cs
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