如何获取所有进程中当前运行的所有log4net loggers

How to obtain all log4net loggers currently running in all processes

我们系统中的每个进程都使用 log4net。其中许多进程都是作为服务启动的。其中一些 运行 应用程序非常冗长,会吐出调试条目,我们希望能够限制它们的输出。所有记录器都使用相同的 .config 文件来设置它们当前的日志记录级别。我正在开发一个应用程序,它将访问所有使用

设置源的记录器

log4net.GlobalContext.Properties["source"] = source;

我想做的是获取当前注册的所有记录器的列表,获取它们的源名称,然后更改每个源的 .config 文件以单独配置每个源的输出级别。

我遇到的问题是找到所有这些记录器的列表,因此我可以在 .config 文件中添加一个条目。有没有办法从单个应用程序获取所有进程的记录器列表?

我试过使用 GetRepository().GetCurrentLoggers(),但只有 returns 当前调用应用程序的记录器。

没有标准的方法来获取其他进程中的记录器。你必须自己做点什么。

试试这个

using log4net.Repository.Hierarchy;
var appenders = ((Hierarchy)LogManager.GetRepository())
                                     .Root.Appenders;