我使用多个记录器节点的实验经验是 log4net 将使用您在任何特定记录器中设置的最低级别。因此,即使您在 MyApp.Common 中指定了 WARN,在 MyApp.Common.SomeGenericClass 中使用 INFO 也会导致全局(?)级别设置下降到 WARN。所以你从 MyApp.Common 和 MyApp.Common.SomeGenericClass 得到了一个条目,因为 appender ConsoleAppender 被触发了两次。
我所追求的是让一部分日志转到一个单独的文件。不完全是您在问题中所说的,但它确实包含了您想要做的事情。而且我确实想在某个地方记录我的解决方案,以便我自己的利益可以再次找到它;-)。
我创建了两个不同的记录器,例如您上面的记录器,尽管一个是 root,但它的工作方式相同。然后我创建了两个不同的附加程序,每个附加程序都过滤不同的错误级别,并在两个记录器中分别引用它们。我得到的是一个文件中来自 OtherNamespace 的日志和另一个文件中的所有其他内容。代码如下。
<log4net>
<logger name="OtherNamespace">
<appender-ref ref="OtherNamespaceAppender"/>
</logger>
<root>
<level value="WARN"/>
<appender-ref ref="MyRollingFileAppender"/>
</root>
<appender name="MyRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\Comanche\mylogfileFor_%property{User}.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<threshold value="ERROR" />
<countDirection value="3" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="200KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-6level%utcdate{ABSOLUTE} – %location :: %message%newline" />
</layout>
</appender>
<appender name="OtherNamespaceAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\Comanche\OtherNamespace.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<threshold value="WARN" />
<countDirection value="3" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="200KB" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.LoggerMatchFilter">
<acceptOnMatch value="true" />
<LoggerToMatch value="OtherNamespace" />
<!-- set your class name here -->
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-6level%utcdate{ABSOLUTE} :: %message%newline" />
</layout>
</appender>
请注意,“其他所有内容”都在另一个命名空间中,因此它不会被分流到 OtherNamespace 记录器中,如果存在某种名称匹配,它可能会有这种情况。另请注意,由于所有内容都从 root 继承,如果我将 root 引用的 appender 上的日志记录级别更改为 WARN,我也会得到 OtherNamespace 日志。我想要实现的只是将更详细的日志记录到与其他所有文件不同的文件中。