log4net:configuration忽略来自特定类的消息

有没有办法让log4netconfiguration忽略一个特定的类? 例如,我们通常在每个class级创build一个日志。 与此类似:

private static readonly ILog Log = log4net.LogManager.GetLogger("MyClass"); 

问题是MyClasslogging了大量的数据,并且很难find其他类的信息。 它的另一个使用MyClass开发,所以我不能只是进入和改变日志文件,但在我的环境,我想忽略这些。

我可以将我的configuration文件设置为忽略来自特定类的消息吗?

当然,使用filter。

以下是博客上发布的代码片段,供将来参考 – 所有功劳都归功于该博客文章的作者:

 <filter type="log4net.Filter.LoggerMatchFilter"> <!-- allows this sub-namespace to be logged... --> <loggerToMatch value="Noisy.Namespace.But.Important" /> </filter> <filter type="log4net.Filter.LoggerMatchFilter"> <!-- ...but not the rest of it --> <loggerToMatch value="Noisy.Namespace" /> <acceptOnMatch value="false" /> </filter> 

一个filter当然有效,但我宁愿直接closureslogging器(或logging器层次结构),像这样:

 <logger name="YourNameSpace.WithNoLogging" additivity="false"> <level value="OFF" /> </logger> <logger name="MyClass" additivity="false"> <level value="OFF" /> </logger> <root> <level value="ALL" /> <appender-ref ref="YourAppender" /> </root> 

假设YourNameSpace.WithNoLogging是一个名称空间,那么显示的configuration将禁用整个名称空间上的日志logging。 第二个“例子”closures日志logging你的课(根据你的问题)。

我会build议使用filter 。 然而,因为我努力find整个图片,当我试图实现filter,我张贴了我创build的Configutation file的示例片段指出了filter去哪里。

你在这种情况下正在磨练的filter将是

log4net.Filter.LoggerMatchFilter —-(匹配logging器名称的开头)

Log4Netconfig文件中提示 ,放置标签以及它们的优先级是非常重要的。 因此,在这种情况下, <filter>标签位于<appender>开始标签之后,并且位于<file value = ... />标签之前。

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <appender name="RollingFile.PassedDevices" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="Foo.namespace.bar.mySubclass" /> <acceptOnMatch value="false" /> </filter> <file value="myPassedDevices.log" /> <appendToFile value="true" /> <maximumFileSize value="100KB" /> <maxSizeRollBackups value="2" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%timestamp %level - %message [%thread] %logger%newline" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="RollingFile" /> <!-- My other appender which logs all and I cut it out in this snippet. Remember that you should reference all your appenders in this tag to make them work.--> <appender-ref ref="RollingFile.PassedDevices" /> </root> </log4net> </configuration> 

在这种技术中,你可以有多个appenders ,你可以将特定logging器的logging结果redirect到一个单独的appender而不是忽略它们。 比如一个appender用于所有日志,另一个用于特定class的过滤日志。

您可能想尝试将类别应用到您自己的消息尝试此线程: 如何将类别前缀添加到log4net消息?