能够以编程方式删除记录器

时间:2012-11-14 00:30:30

标签: log4net

一旦添加Logger,有没有办法删除它?通过说:

LogManager.GetLogger("loggerName")

在我的研究中,似乎不可能。我找到的最接近的是能够拨打Clear hierarchy method。这确实会清除现有的记录器,但我想有选择地删除它们,更不用说这可能不是最安全的事情了。

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

当然,还有其他可行的设计。可以通过根据需要向给定Appenders添加/删除FiltersLogger来解决此问题。此外,可以创建LoggersAppenders池,然后按任务配置。

如果添加后无法移除特定记录器,显然不是显示停止。我只是好奇是否有办法删除我可能错过的Logger

2 个答案:

答案 0 :(得分:1)

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

记录器实例似乎只是创建。为什么没有删除记录器实例的方法?   定义"删除"的语义是非常重要的。记录器,仍由用户引用。

来源: Ability to programmatically remove a Logger

答案 1 :(得分:0)

因为它已经打开了很长时间所以把它包装起来。我还没有找到一种方法来自行删除记录器,我在文档中看到的任何内容都表明它也可能。这个解决方案对我来说可以共享一个只能增加到最大并发任务量的记录器池。每个任务都可以从池中获取一个记录器,并添加一个特定于该任务的appender。在任务完成时,删除appender并将记录器返回到池中。