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>