我已经编写了自己的appender来排队请求,以便我可以将它们发送到另一个线程,基本上是异步appender。我的appender创建一个工作线程来处理排队的请求。如果我的appender的工作线程被标记为后台线程,例如。 IsBackground = true,然后调用我的appender的OnClose(),但进程失败而不等待该方法完成。如果我的appender的工作线程被标记为前台线程,那么我的appender的OnClose()永远不会被调用,我的应用程序也不会关闭。
我的猜测是这种行为是由于log4net如何检测应用程序关闭。将我的appender的工作线程标记为前台线程使得log4net不会检测到应用程序正在关闭(例如,没有域关闭事件或卸载,无论log4net用于检测)。我能理解,这似乎是合理的。但是,看起来OnClose()似乎没有用,因为它只在进程关闭时被调用,并且关闭代码没有等待我的OnClose()完成。
我做错了吗?有没有正确的方法来清理log4net async appender的资源?
谢谢, 尼克