Author: bodewig
Date: Wed Apr  1 14:21:08 2015
New Revision: 1670656

URL: http://svn.apache.org/r1670656
Log:
promote AsyncAppender from examples to proper and simplify it by extending 
ForwardingAppender

Added:
    logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs
      - copied, changed from r1670649, 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/Appender/AsyncAppender.cs
Removed:
    
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/Appender/AsyncAppender.cs
Modified:
    
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/App.config
    
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/SampleAppendersApp.csproj
    logging/log4net/trunk/src/log4net/log4net.vs2008.csproj
    logging/log4net/trunk/src/log4net/log4net.vs2010.csproj
    logging/log4net/trunk/src/log4net/log4net.vs2012.csproj

Modified: 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/App.config
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/App.config?rev=1670656&r1=1670655&r2=1670656&view=diff
==============================================================================
--- 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/App.config 
(original)
+++ 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/App.config 
Wed Apr  1 14:21:08 2015
@@ -91,10 +91,6 @@
                        <layout type="log4net.Layout.PatternLayout" 
value="%date [%thread] %-5level %logger - %message%newline" />
                </appender>
                
-               <appender name="AsyncConsoleAppender" 
type="SampleAppendersApp.Appender.AsyncAppender, SampleAppendersApp">
-                       <appender-ref ref="ColoredConsoleAppender" />
-               </appender>
-               
                <appender name="FastDbAppender" 
type="SampleAppendersApp.Appender.FastDbAppender, SampleAppendersApp">
                        <connectionString value="Persist Security 
Info=False;Integrated Security=false;server=ate;database=log4net_test;Connect 
Timeout=30;User ID=sa;Password=sa" />
                </appender>
@@ -117,7 +113,6 @@
                        <appender-ref ref="FireEventAppender" />
                        <appender-ref ref="SimpleSmtpAppender" />
                        <appender-ref ref="MsmqAppender" />
-                       <appender-ref ref="AsyncConsoleAppender" />
                        <appender-ref ref="FastDbAppender" />
 
                </root>

Modified: 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/SampleAppendersApp.csproj
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/SampleAppendersApp.csproj?rev=1670656&r1=1670655&r2=1670656&view=diff
==============================================================================
--- 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/SampleAppendersApp.csproj
 (original)
+++ 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/SampleAppendersApp.csproj
 Wed Apr  1 14:21:08 2015
@@ -122,9 +122,6 @@
       <Link>AssemblyVersionInfo.cs</Link>
       <SubType>Code</SubType>
     </Compile>
-    <Compile Include="Appender\AsyncAppender.cs">
-      <SubType>Code</SubType>
-    </Compile>
     <Compile Include="Appender\FastDbAppender.cs">
       <SubType>Code</SubType>
     </Compile>

Copied: logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs (from 
r1670649, 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/Appender/AsyncAppender.cs)
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs?p2=logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs&p1=logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/Appender/AsyncAppender.cs&r1=1670649&r2=1670656&rev=1670656&view=diff
==============================================================================
--- 
logging/log4net/trunk/src/examples/cs/Appenders/SampleAppendersApp/Appender/AsyncAppender.cs
 (original)
+++ logging/log4net/trunk/src/log4net/Appender/AsyncAppender.cs Wed Apr  1 
14:21:08 2015
@@ -23,7 +23,7 @@ using log4net.Appender;
 using log4net.Core;
 using log4net.Util;
 
-namespace SampleAppendersApp.Appender
+namespace log4net.Appender
 {
        /// <summary>
        /// Appender that forwards LoggingEvents asynchronously
@@ -34,161 +34,76 @@ namespace SampleAppendersApp.Appender
        /// This allows the calling thread to be released quickly, however it 
does
        /// not guarantee the ordering of events delivered to the attached 
appenders.
        /// </remarks>
-       public sealed class AsyncAppender : IAppender, IBulkAppender, 
IOptionHandler, IAppenderAttachable
+       public sealed class AsyncAppender : ForwardingAppender, IBulkAppender
        {
-               private string m_name;
-
-               public string Name
-               {
-                       get { return m_name; }
-                       set { m_name = value; }
-               }
-
-               public void ActivateOptions() 
-               {
-               }
 
+               /// <summary>
+               /// Gets or sets a the fields that will be fixed in the event
+               /// </summary>
+               /// <value>
+               /// The event fields that will be fixed before the event is 
forwarded
+               /// </value>
+               /// <remarks>
+               /// <para>
+               /// The logging event needs to have certain thread specific 
values 
+               /// captured before it can be forwarded to a different thread.
+               /// See <see cref="LoggingEvent.Fix"/> for details.
+               /// </para>
+               /// </remarks>
+               /// <seealso cref="LoggingEvent.Fix"/>
                public FixFlags Fix
                {
                        get { return m_fixFlags; }
                        set { m_fixFlags = value; }
                }
 
-               public void Close()
-               {
-                       // Remove all the attached appenders
-                       lock(this)
-                       {
-                               if (m_appenderAttachedImpl != null)
-                               {
-                                       
m_appenderAttachedImpl.RemoveAllAppenders();
-                               }
-                       }
-               }
-
-               public void DoAppend(LoggingEvent loggingEvent)
+               /// <summary>
+               /// Forward the logging event to the attached appenders on a 
ThreadPool thread
+               /// </summary>
+               /// <param name="loggingEvent">The event to log.</param>
+               /// <remarks>
+               /// <para>
+               /// Delivers the logging event to all the attached appenders on 
a ThreadPool thread.
+               /// </para>
+               /// </remarks>
+               override protected void Append(LoggingEvent loggingEvent) 
                {
                        loggingEvent.Fix = m_fixFlags;
-                       System.Threading.ThreadPool.QueueUserWorkItem(new 
WaitCallback(AsyncAppend), loggingEvent);
+                       ThreadPool.QueueUserWorkItem(AsyncAppend, loggingEvent);
                }
 
-               public void DoAppend(LoggingEvent[] loggingEvents)
+               /// <summary>
+               /// Forward the logging events to the attached appenders on a 
ThreadPool thread
+               /// </summary>
+               /// <param name="loggingEvents">The array of events to 
log.</param>
+               /// <remarks>
+               /// <para>
+               /// Delivers the logging events to all the attached appenders 
on a ThreadPool thread.
+               /// </para>
+               /// </remarks>
+               override protected void Append(LoggingEvent[] loggingEvents) 
                {
                        foreach(LoggingEvent loggingEvent in loggingEvents)
                        {
                                loggingEvent.Fix = m_fixFlags;
                        }
-                       System.Threading.ThreadPool.QueueUserWorkItem(new 
WaitCallback(AsyncAppend), loggingEvents);
+                       ThreadPool.QueueUserWorkItem(AsyncAppend, 
loggingEvents);
                }
 
                private void AsyncAppend(object state)
                {
-                       if (m_appenderAttachedImpl != null)
-                       {
-                               LoggingEvent loggingEvent = state as 
LoggingEvent;
-                               if (loggingEvent != null)
-                               {
-                                       
m_appenderAttachedImpl.AppendLoopOnAppenders(loggingEvent);
-                               }
-                               else
-                               {
-                                       LoggingEvent[] loggingEvents = state as 
LoggingEvent[];
-                                       if (loggingEvents != null)
-                                       {
-                                               
m_appenderAttachedImpl.AppendLoopOnAppenders(loggingEvents);
-                                       }
-                               }
-                       }
-               }
-
-               #region IAppenderAttachable Members
-
-               public void AddAppender(IAppender newAppender) 
-               {
-                       if (newAppender == null)
-                       {
-                               throw new ArgumentNullException("newAppender");
-                       }
-                       lock(this)
-                       {
-                               if (m_appenderAttachedImpl == null) 
-                               {
-                                       m_appenderAttachedImpl = new 
log4net.Util.AppenderAttachedImpl();
-                               }
-                               m_appenderAttachedImpl.AddAppender(newAppender);
-                       }
-               }
-
-               public AppenderCollection Appenders
-               {
-                       get
-                       {
-                               lock(this)
-                               {
-                                       if (m_appenderAttachedImpl == null)
-                                       {
-                                               return 
AppenderCollection.EmptyCollection;
-                                       }
-                                       else 
-                                       {
-                                               return 
m_appenderAttachedImpl.Appenders;
-                                       }
-                               }
-                       }
-               }
-
-               public IAppender GetAppender(string name) 
-               {
-                       lock(this)
-                       {
-                               if (m_appenderAttachedImpl == null || name == 
null)
-                               {
-                                       return null;
-                               }
-
-                               return m_appenderAttachedImpl.GetAppender(name);
-                       }
-               }
-
-               public void RemoveAllAppenders() 
-               {
-                       lock(this)
+                       LoggingEvent loggingEvent = state as LoggingEvent;
+                       LoggingEvent[] loggingEvents = state as LoggingEvent[];
+                       if (loggingEvent != null)
                        {
-                               if (m_appenderAttachedImpl != null) 
-                               {
-                                       
m_appenderAttachedImpl.RemoveAllAppenders();
-                                       m_appenderAttachedImpl = null;
-                               }
+                               base.Append(loggingEvent);
                        }
-               }
-
-               public IAppender RemoveAppender(IAppender appender) 
-               {
-                       lock(this)
+                       else if (loggingEvents != null)
                        {
-                               if (appender != null && m_appenderAttachedImpl 
!= null) 
-                               {
-                                       return 
m_appenderAttachedImpl.RemoveAppender(appender);
-                               }
+                               base.Append(loggingEvents);
                        }
-                       return null;
                }
 
-               public IAppender RemoveAppender(string name) 
-               {
-                       lock(this)
-                       {
-                               if (name != null && m_appenderAttachedImpl != 
null)
-                               {
-                                       return 
m_appenderAttachedImpl.RemoveAppender(name);
-                               }
-                       }
-                       return null;
-               }
-
-               #endregion
-
-               private AppenderAttachedImpl m_appenderAttachedImpl;
                private FixFlags m_fixFlags = FixFlags.All;
        }
 }

Modified: logging/log4net/trunk/src/log4net/log4net.vs2008.csproj
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/log4net.vs2008.csproj?rev=1670656&r1=1670655&r2=1670656&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/log4net.vs2008.csproj (original)
+++ logging/log4net/trunk/src/log4net/log4net.vs2008.csproj Wed Apr  1 14:21:08 
2015
@@ -118,6 +118,9 @@
     <Compile Include="Appender\AspNetTraceAppender.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Appender\AsyncAppender.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Appender\BufferingAppenderSkeleton.cs">
       <SubType>Code</SubType>
     </Compile>

Modified: logging/log4net/trunk/src/log4net/log4net.vs2010.csproj
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/log4net.vs2010.csproj?rev=1670656&r1=1670655&r2=1670656&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/log4net.vs2010.csproj (original)
+++ logging/log4net/trunk/src/log4net/log4net.vs2010.csproj Wed Apr  1 14:21:08 
2015
@@ -136,6 +136,9 @@
     <Compile Include="Appender\AspNetTraceAppender.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Appender\AsyncAppender.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Appender\BufferingAppenderSkeleton.cs">
       <SubType>Code</SubType>
     </Compile>

Modified: logging/log4net/trunk/src/log4net/log4net.vs2012.csproj
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/log4net.vs2012.csproj?rev=1670656&r1=1670655&r2=1670656&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net/log4net.vs2012.csproj (original)
+++ logging/log4net/trunk/src/log4net/log4net.vs2012.csproj Wed Apr  1 14:21:08 
2015
@@ -136,6 +136,9 @@
     <Compile Include="Appender\AspNetTraceAppender.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Appender\AsyncAppender.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Appender\BufferingAppenderSkeleton.cs">
       <SubType>Code</SubType>
     </Compile>


Reply via email to