我有一个自定义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!");
}