静态log4net bufferedappender

时间:2015-10-07 12:23:54

标签: log4net log4net-configuration log4net-appender

我喜欢我的应用程序的静态缓冲appender。我找到了一种方法来实现这一目标,但这有点像黑客攻击。如下所示,它具有3的缓冲区。当缓冲区填充时,将调用SendBuffer(LoggingEvent []事件)方法。这应该是适用范围广泛的。如果任何记录器收到消息,它应该将它转发给这个静态缓冲的appender,它会在拥有它们时一次写出4条消息。

我的实现(hack)是一个新的ForwardingDbBufferedAppender(BufferingAppenderSkeleton),它将消息传递给静态DbBufferedAppender(也是新的BufferingAppenderSkeleton),如下所示:

 public class ForwardingDbBufferedAppender : log4net.Appender.BufferingAppenderSkeleton
{
    private static readonly object m_lockObj = new object();
    private static DbBufferedAppender m_dbBufferedAppender;

    public override void ActivateOptions()
    {
        lock (m_lockObj)
        {
            if (m_dbBufferedAppender == null)
            {
                m_dbBufferedAppender = new DbBufferedAppender(this.BufferSize);
            }
        }
        base.ActivateOptions();
    }

    protected override void Append(LoggingEvent loggingEvent)
    {
        m_dbBufferedAppender.DoAppend(loggingEvent);
    }

    protected override void SendBuffer(LoggingEvent[] events)
    {
    }

配置:

  <log4net>
    <appender name="ForwardingDbBufferedAppender" type="Blah.ForwardingDbBufferedAppender, Blah">
       <bufferSize value="3" />
    </appender>
    <root>
      <level value="ALL" />
        <appender-ref ref="ForwardingDbBufferedAppender" />
    </root>
 </log4net>

有更好的方法吗?现在这是一个完全黑客攻击,因为我只转发BufferSize。如果我添加范围过滤器或将有损开关添加到true并添加评估器等,那么现在我必须将所有配置可能性转发给静态DbBufferedAppender。

0 个答案:

没有答案