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 rg...@apache.org on 2008/05/07 03:37:21 UTC

svn commit: r653963 - in /logging/log4net/trunk: src/Config/BasicConfigurator.cs src/Repository/Hierarchy/Hierarchy.cs src/Repository/IBasicRepositoryConfigurator.cs tests/src/Hierarchy/Hierarchy.cs

Author: rgrabowski
Date: Tue May  6 18:37:20 2008
New Revision: 653963

URL: http://svn.apache.org/viewvc?rev=653963&view=rev
Log:
Fix for LOG4NET-153. Add overload to IBasicRepositoryConfigurator.Configure that accepts an array of IAppender objects instead of just a single IAppender.

Modified:
    logging/log4net/trunk/src/Config/BasicConfigurator.cs
    logging/log4net/trunk/src/Repository/Hierarchy/Hierarchy.cs
    logging/log4net/trunk/src/Repository/IBasicRepositoryConfigurator.cs
    logging/log4net/trunk/tests/src/Hierarchy/Hierarchy.cs

Modified: logging/log4net/trunk/src/Config/BasicConfigurator.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Config/BasicConfigurator.cs?rev=653963&r1=653962&r2=653963&view=diff
==============================================================================
--- logging/log4net/trunk/src/Config/BasicConfigurator.cs (original)
+++ logging/log4net/trunk/src/Config/BasicConfigurator.cs Tue May  6 18:37:20 2008
@@ -110,19 +110,33 @@
 		/// </remarks>
 		static public ICollection Configure(IAppender appender) 
 		{
+            return Configure(new IAppender[] { appender });
+		}
+
+        /// <summary>
+        /// Initializes the log4net system using the specified appenders.
+        /// </summary>
+        /// <param name="appenders">The appenders to use to log all logging events.</param>
+        /// <remarks>
+        /// <para>
+        /// Initializes the log4net system using the specified appenders.
+        /// </para>
+        /// </remarks>
+        static public ICollection Configure(params IAppender[] appenders)
+        {
             ArrayList configurationMessages = new ArrayList();
 
             ILoggerRepository repository = LogManager.GetRepository(Assembly.GetCallingAssembly());
 
             using (new LogLog.LogReceivedAdapter(configurationMessages))
             {
-                InternalConfigure(repository, appender);
+                InternalConfigure(repository, appenders);
             }
 
             repository.ConfigurationMessages = configurationMessages;
 
             return configurationMessages;
-		}
+        }
 
 		/// <summary>
 		/// Initializes the <see cref="ILoggerRepository"/> with a default configuration.
@@ -173,11 +187,26 @@
         /// </remarks>
         static public ICollection Configure(ILoggerRepository repository, IAppender appender)
         {
+            return Configure(repository, new IAppender[] { appender });
+        }
+
+        /// <summary>
+        /// Initializes the <see cref="ILoggerRepository"/> using the specified appenders.
+        /// </summary>
+        /// <param name="repository">The repository to configure.</param>
+        /// <param name="appenders">The appenders to use to log all logging events.</param>
+        /// <remarks>
+        /// <para>
+        /// Initializes the <see cref="ILoggerRepository"/> using the specified appender.
+        /// </para>
+        /// </remarks>
+        static public ICollection Configure(ILoggerRepository repository, params IAppender[] appenders)
+        {
             ArrayList configurationMessages = new ArrayList();
 
             using (new LogLog.LogReceivedAdapter(configurationMessages))
             {
-                InternalConfigure(repository, appender);
+                InternalConfigure(repository, appenders);
             }
 
             repository.ConfigurationMessages = configurationMessages;
@@ -185,12 +214,12 @@
             return configurationMessages;
         }
 	    
-		static private void InternalConfigure(ILoggerRepository repository, IAppender appender) 
+		static private void InternalConfigure(ILoggerRepository repository, params IAppender[] appenders) 
 		{
             IBasicRepositoryConfigurator configurableRepository = repository as IBasicRepositoryConfigurator;
             if (configurableRepository != null)
             {
-                configurableRepository.Configure(appender);
+                configurableRepository.Configure(appenders);
             }
             else
             {

Modified: logging/log4net/trunk/src/Repository/Hierarchy/Hierarchy.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Repository/Hierarchy/Hierarchy.cs?rev=653963&r1=653962&r2=653963&view=diff
==============================================================================
--- logging/log4net/trunk/src/Repository/Hierarchy/Hierarchy.cs (original)
+++ logging/log4net/trunk/src/Repository/Hierarchy/Hierarchy.cs Tue May  6 18:37:20 2008
@@ -19,7 +19,9 @@
 
 using System;
 using System.Collections;
+using log4net.Appender;
 using log4net.Core;
+using log4net.Repository;
 using log4net.Util;
 
 namespace log4net.Repository.Hierarchy
@@ -545,29 +547,41 @@
 		/// Initialize the log4net system using the specified appender
 		/// </summary>
 		/// <param name="appender">the appender to use to log all logging events</param>
-		void IBasicRepositoryConfigurator.Configure(Appender.IAppender appender)
+		void IBasicRepositoryConfigurator.Configure(IAppender appender)
 		{
 			BasicRepositoryConfigure(appender);
 		}
 
+        /// <summary>
+        /// Initialize the log4net system using the specified appenders
+        /// </summary>
+        /// <param name="appenders">the appenders to use to log all logging events</param>
+        void IBasicRepositoryConfigurator.Configure(params IAppender[] appenders)
+        {
+            BasicRepositoryConfigure(appenders);
+        }
+
 		/// <summary>
-		/// Initialize the log4net system using the specified appender
+		/// Initialize the log4net system using the specified appenders
 		/// </summary>
-		/// <param name="appender">the appender to use to log all logging events</param>
+		/// <param name="appenders">the appenders to use to log all logging events</param>
 		/// <remarks>
 		/// <para>
 		/// This method provides the same functionality as the 
-		/// <see cref="IBasicRepositoryConfigurator.Configure"/> method implemented
+		/// <see cref="IBasicRepositoryConfigurator.Configure(IAppender)"/> method implemented
 		/// on this object, but it is protected and therefore can be called by subclasses.
 		/// </para>
 		/// </remarks>
-		protected void BasicRepositoryConfigure(Appender.IAppender appender)
+		protected void BasicRepositoryConfigure(params IAppender[] appenders)
 		{
             ArrayList configurationMessages = new ArrayList();
 
             using (new LogLog.LogReceivedAdapter(configurationMessages))
             {
-                Root.AddAppender(appender);
+                foreach (IAppender appender in appenders)
+                {
+                    Root.AddAppender(appender);
+                }
             }
 
 		    Configured = true;
@@ -598,7 +612,7 @@
 		/// <remarks>
 		/// <para>
 		/// This method provides the same functionality as the 
-		/// <see cref="IBasicRepositoryConfigurator.Configure"/> method implemented
+		/// <see cref="IBasicRepositoryConfigurator.Configure(IAppender)"/> method implemented
 		/// on this object, but it is protected and therefore can be called by subclasses.
 		/// </para>
 		/// </remarks>

Modified: logging/log4net/trunk/src/Repository/IBasicRepositoryConfigurator.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Repository/IBasicRepositoryConfigurator.cs?rev=653963&r1=653962&r2=653963&view=diff
==============================================================================
--- logging/log4net/trunk/src/Repository/IBasicRepositoryConfigurator.cs (original)
+++ logging/log4net/trunk/src/Repository/IBasicRepositoryConfigurator.cs Tue May  6 18:37:20 2008
@@ -17,10 +17,6 @@
 //
 #endregion
 
-using System;
-using System.Collections;
-using log4net.Util;
-
 namespace log4net.Repository
 {
 	/// <summary>
@@ -50,6 +46,18 @@
 		/// specified appender.
 		/// </para>
 		/// </remarks>
-        void Configure(log4net.Appender.IAppender appender);
+        void Configure(Appender.IAppender appender);
+
+        /// <summary>
+        /// Initialize the repository using the specified appenders
+        /// </summary>
+        /// <param name="appenders">the appenders to use to log all logging events</param>
+        /// <remarks>
+        /// <para>
+        /// Configure the repository to route all logging events to the
+        /// specified appenders.
+        /// </para>
+        /// </remarks>
+        void Configure(params Appender.IAppender[] appenders);
 	}
 }

Modified: logging/log4net/trunk/tests/src/Hierarchy/Hierarchy.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Hierarchy/Hierarchy.cs?rev=653963&r1=653962&r2=653963&view=diff
==============================================================================
--- logging/log4net/trunk/tests/src/Hierarchy/Hierarchy.cs (original)
+++ logging/log4net/trunk/tests/src/Hierarchy/Hierarchy.cs Tue May  6 18:37:20 2008
@@ -1,7 +1,10 @@
 using System;
 using System.Xml;
 using log4net.Config;
+using log4net.Core;
 using log4net.Repository;
+using log4net.Repository.Hierarchy;
+using log4net.Tests.Appender;
 using NUnit.Framework;
 
 namespace log4net.Tests.Hierarchy
@@ -35,5 +38,39 @@
             Assert.AreEqual("4", rep.Properties["two-plus-two"]);
             Assert.IsNull(rep.Properties["one-plus-one"]);
         }
+
+        [Test]
+        public void AddingMultipleAppenders()
+        {
+            CountingAppender alpha = new CountingAppender();
+            CountingAppender beta = new CountingAppender();
+
+            Repository.Hierarchy.Hierarchy hierarchy = 
+                (Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
+            hierarchy.Root.AddAppender(alpha);
+            hierarchy.Root.AddAppender(beta);
+            hierarchy.Configured = true;
+
+            ILog log = LogManager.GetLogger(GetType());
+            log.Debug("Hello World");
+
+            Assert.AreEqual(1, alpha.Counter);
+            Assert.AreEqual(1, beta.Counter);
+        }
+
+        [Test]
+        public void AddingMultipleAppenders2()
+        {
+            CountingAppender alpha = new CountingAppender();
+            CountingAppender beta = new CountingAppender();
+            
+            BasicConfigurator.Configure(alpha, beta);
+
+            ILog log = LogManager.GetLogger(GetType());
+            log.Debug("Hello World");
+
+            Assert.AreEqual(1, alpha.Counter);
+            Assert.AreEqual(1, beta.Counter);
+        }
     }
 }