3

有没有办法Logger在添加后删除它?通过说:

LogManager.GetLogger("loggerName")

在我的研究中,这似乎是不可能的。我发现最接近的是调用Clear 层次结构方法的能力。这确实会清除现有的记录器,但我想有选择地删除它们,更不用说这可能不是最安全的事情。

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

当然,还有其他可行的设计。可以通过添加/删除Appenders以及Filters根据需要对给定的Logger. 此外,可以创建一个池,然后为每个任务配置Loggers一个池。Appenders

如果在添加特定记录器后无法删除它,那么它显然不是一个显示停止器。我只是好奇是否有办法删除Logger我可能错过的内容?

4

2 回答 2

2

不,这是不可能的。这些天在他们的常见问题解答中特别提到了这一点:

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

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

于 2017-06-06T22:12:46.857 回答
1

因为它已经开放了很长时间,所以总结一下。我还没有找到一种自行删除记录器的方法,而且我在文档中看到的任何内容都没有表明它也是可能的。对我有用的解决方案是共享一个只会增长到最大并发任务数量的记录器池。每个任务都可以从池中获取一个记录器,并添加一个特定于该任务的附加程序。任务完成后,appender 被移除,记录器返回到池中。

于 2016-03-12T20:23:41.083 回答