Log4Net appender在IIS Express停止站点上过早停止

时间:2017-03-17 12:54:27

标签: multithreading iis log4net

我有一个自定义appender,派生自BufferingAppenderSkeleton并实现IAppenderAttachable并将日志记录事件发送到队列(实际上发送到BlockingCollection,内部添加到队列然后通过单独的线程从该队列中删除并通过http发送日志消息。

这一功能正常,直到应用程序必须关闭。发生这种情况时,应用程序将关闭,队列中的所有消息都将丢失。我添加了一个Close来处理它并等待收集完成,但代码永远不会那么远,它总是突然结束。我怎样才能让它继续运行,直到队列为空或说过10秒(例如下面的例子)。

这是Appender OnClose:

protected override void OnClose()
    {
        this.Flush(true);
        _handler.Close();
        this.RemoveAllAppenders();
    }

并且这里是处理程序的Close(实现BlockingCollection的类):

public void Close()
    {
        _blockingCollection.CompleteAdding();
        if (!_blockingCollection.IsCompleted)
        {
            _manualResetEvent.WaitOne(10000);
        }
        Debug.WriteLine("Actually finished!");
    }

0 个答案:

没有答案