假设你创造了
_repository
使用
LogManager.CreateRepository()
,这实际上创建了一个
Hierarchy
,当您使用新的appender通过
BasicConfigurator.Configure(_repository, appender);
Root
追加器集合。
然后从存储库中创建的所有记录器都是“根”的子记录器,并且配置为“加法”,因为它们附加到直接针对它们定义的所有附加器上,
和
全部的
追加者。因此,所有消息都会记录到每个文件中。
您要做的是将appender附加到其特定的记录器,并禁用additivity,这样它就不会再记录到层次结构中更高的appender。似乎没有一个“好”的方法可以做到这一点,但在我的测试中,以下方法起到了作用:
...
appender.AddFilter(filter);
appender.ActivateOptions();
// Add the appender directly to the logger and prevent it picking up parent appenders
if (LoggerManager.GetLogger(_repository.Name, name) is Logger loggerImpl)
{
loggerImpl.Additivity = false;
loggerImpl.AddAppender(appender);
}
BasicConfigurator.Configure(_repository, appender);
return LogManager.GetLogger(_repository.Name, name);