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

Kyl*_*yle 63 c# logging log4net

有没有办法让log4net配置忽略特定的类?例如,我们通常在每个类中创建一个日志.与此类似:

private static readonly ILog Log = log4net.LogManager.GetLogger("MyClass");
Run Code Online (Sandbox Code Playgroud)

问题是MyClass记录大量数据,很难找到有关其他类的信息.它使用的另一个开发者MyClass我不能只是进入并更改日志文件,但在我的环境中我想忽略这些.

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

jve*_*ema 72

当然,使用过滤器.

这是在博客上发布的片段,供将来参考 - 所有归功于该博客文章的作者:

<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>
Run Code Online (Sandbox Code Playgroud)


Ste*_*gli 56

过滤器肯定有效,但我更喜欢直接关闭记录器(或记录器层次结构),如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

假设这YourNameSpace.WithNoLogging是一个名称空间,那么显示的配置将禁用整个名称空间的日志记录.第二个"示例"会关闭您班级的日志记录(根据您的问题).


Meh*_*rad 14

我建议也使用过滤器.但是,由于我在尝试实现过滤器时难以找到整个图片,因此我发布了一个Configutation file我创建的样本片段,指出过滤器的位置.

在这种情况下,您正在进行过滤的过滤器将是

log4net.Filter.LoggerMatchFilter ----(与记录器名称的开头匹配.)

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>
Run Code Online (Sandbox Code Playgroud)

在这种技术中,您可以使用多个appenders,您可以将特定记录器的日志记录结果重定向到单独的记录器appender而不是忽略它们.例如,一个appender用于所有日志,一个用于特定的过滤日志class.