2012-11-14 29 views
2

一旦添加了Logger,是否有办法删除它?说通过:以编程方式删除记录器的能力

LogManager.GetLogger("loggerName") 

在我的研究中,它会出现这是不可能的。我发现的最接近的是能够拨打Clearhierarchy method。这确实会清除现有的记录器,但我想选择性地将其删除,更不用说这可能不是最安全的事情。

对于一些背景,我记录了每个任务的一个文件,其中可能有数千个并发任务和每个应用程序生命周期的数十万个任务。一种方法是为每个任务创建一个Logger,然后在任务完成后将其删除。如果没有选择性地删除Logger的能力,内存将被退役的实例咀嚼。

当然,还有其他可行的设计。通过根据需要向给定的Logger添加/删除AppendersFilters可解决该问题。此外,还可以创建一个LoggersAppenders的池,然后对每个任务进行配置。

它显然不是一个显示塞如果没有办法删除特定的记录器,一旦它被添加。我只是好奇,如果有一种方法可以删除我可能错过的Logger

回答

0

自从它开放了很长时间以后,将其包装起来。我还没有找到一种方法来自行移除记录器,而且我在文档中看到的任何内容都表明它也可能。这个解决方案对我来说共享一个只能增长到最大并发任务数量的记录器池。每个任务都可以从池中取出一个记录器,并为该任务添加一个appender。在任务完成时,appender被移除并且记录器返回到池中。

1

不,这是不可能的。这些在他们的FAQ中特别提到:

记录器实例似乎只是创建。为什么没有删除记录器实例的方法? 定义用户仍然引用的“已删除”记录器的语义是相当不容易的。

来源: Ability to programmatically remove a Logger