【发布时间】:2015-03-10 07:29:57
【问题描述】:
大家好,我想扩展AsyncForwardingAppender。
我有以下配置文件:
<log4net>
<appender name="AsyncForwardingAppenderExtender" type="log4net.Async.AsyncForwardingAppender,Log4net.Async" >
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
<root>
<level value="Info" />
<appender-ref ref="AsyncForwardingAppenderExtender" />
</root>
</log4net>
现在在我的代码中,我重写了Append 方法,如下所示
public class AsyncForwardingAppenderExtender : Log4Net.Async.AsyncForwardingAppender
{
private Queue<LoggingEvent> buffer = new Queue<LoggingEvent>();
private static readonly Type ThisType = typeof (AsyncForwardingAppender);
public AsyncForwardingAppenderExtender()
{
}
protected override void Append(LoggingEvent loggingEvent)
{
buffer.Enqueue(loggingEvent);
}
protected override void Append(LoggingEvent[] loggingEvents)
{
foreach (var loggingEvent in loggingEvents)
{
Append(loggingEvent);
}
}
public override void ActivateOptions()
{
base.ActivateOptions();
InitializeBuffer();
StartForwarding();
}
private void StartForwarding()
{
Thread forwardingThread =
new Thread(ForwardingThreadExecute)
{
Name = String.Format("{0} Forwarding Appender Thread", Name),
IsBackground = false,
};
forwardingThread.Start();
}
public void InitializeBuffer()
{
buffer = new Queue<LoggingEvent>();
}
private void ForwardingThreadExecute()
{
try
{
ForwardLoggingEventsFromBuffer();
}
catch (Exception exception)
{
// ForwardInternalError("Unexpected error in asynchronous forwarding loop", exception, ThisType);
}
}
private void ForwardLoggingEventsFromBuffer()
{
CLSAdapter adapter = new CLSAdapter();
while (buffer.Count > 0)
{
LoggingEvent l = buffer.Dequeue();
LoggingEventData data = l.GetLoggingEventData();
adapter.CreateConnection(data.Message);
}
}
}
Append 正在追加到队列中。然后StartForwading通过一个函数从队列推送到Splunk。
问题是:Append 没有被触发,当我从我的程序中执行类似 Log.Fatal("hhhh") 的操作时。创建此自定义附加程序时我缺少什么?
【问题讨论】:
-
相同的日志记录是否适用于默认附加程序?
标签: .net log4net log4net-configuration log4net-appender