log4net - 获取特定于一个记录器的附加程序

and*_*eav 5 logging log4net log4net-appender

我正在寻找一种方法将所有附加程序附加到一个记录器实例。

我试过:

Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
hierarchy.GetAppenders()
Run Code Online (Sandbox Code Playgroud)

根据文档,这将返回当前配置的所有记录器的所有附加程序。

当我尝试这个时:

LogManager.GetLogger("MyLoggerName").Logger.Repository.GetAppenders();
Run Code Online (Sandbox Code Playgroud)

我得到相同的结果。

我只想检索附加到一个记录器的附加程序(在这种情况下为“MyLoggerName”)

我哪里错了?

sam*_*amy 5

当您调用以下代码时

LogManager.GetLogger("MyLoggerName").Logger.Repository.GetAppenders();
Run Code Online (Sandbox Code Playgroud)

您实际上是在询问与hierarchy.GetAppenders()因为Hierarchy继承完全相同的数据LoggerRepositorySkeleton,它实现ILoggerRepositoryLogger.Repository.

但是,您可以使用Logger位于Hierarchy命名空间中的类来获取“第一级”附加程序的列表:

var h = LogManager.GetRepository() as Hierarchy;
var l = h.GetLogger("MyLoggerName", h.LoggerFactory);
// do something with the l.Appenders property
Run Code Online (Sandbox Code Playgroud)

您将不得不从那里处理特殊情况,例如缓冲或过滤 appender