【问题标题】:Extending AsyncForwardingAppender in log4net在 log4net 中扩展 AsyncForwardingAppender
【发布时间】: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


【解决方案1】:
<appender name="AsyncForwardingAppenderExtender" type="log4net.Async.AsyncForwardingAppender,Log4net.Async" >

类型错误 - 应该是您的 AsyncForwardingAppenderExtender

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多