Статический log4net с буферизацией приложения

Я хотел бы использовать статический буфер для моего приложения. Я нашел способ сделать это, но это немного взломать. Как показано ниже, он имеет буфер 3. Когда этот буфер заполняется, вызывается метод SendBuffer(LoggingEvent[] events). Это должно быть широкое применение. Если какой-либо регистратор получает сообщение, он должен переслать его этому статическому буферизованному приложению, которое будет записывать 4 сообщения одновременно в БД, когда оно будет у них.

Моя реализация (хак) - это новый 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)
    {
    }

Config:

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

Есть ли способ лучше? Прямо сейчас это полный взлом, потому что я пересылаю только BufferSize. Что, если я добавлю фильтр диапазона или переключу потери с истинным значением и добавлю оценщик и т. Д. Прямо сейчас мне придется перенаправить все возможности конфигурации в статический DbBufferedAppender.

0 ответов

Другие вопросы по тегам