Log4Net过滤掉日志中的INFO,只显示DEBUG和ERROR。

9
有没有办法使用web.config中的配置来过滤掉日志中的INFO,只显示DEBUG和ERROR?
<root>
<level value="DEBUG" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="RollingFileSystemAppender" />
<appender-ref ref="ConsoleAppender" />
</root>

可能是重复的问题:Log4Net配置-LevelMatchFilter - samy
2个回答

11

在log4X中,可以使用过滤器来筛选消息并应用到appender上; 这是一个过滤器列表

  • log4net.Filter.LevelMatchFilter 筛选匹配特定日志级别的日志事件;或者配置为筛选不匹配特定日志级别的日志事件。
  • log4net.Filter.LevelRangeFilter 类似于LevelMatchFilter,但这会对连续级别的包容性范围进行筛选。
  • log4net.Filter.LoggerMatchFilter 基于发出它们的记录器对象名称来筛选日志事件。
  • log4net.Filter.StringMatchFilter 基于字符串或正则表达式匹配日志消息来筛选日志事件。
  • log4net.Filter.PropertyFilter 基于与特定上下文属性值或正则表达式匹配来筛选日志事件。
  • log4net.Filter.DenyAllFilter 实际上会删除所有针对appender的日志事件。

在您的情况下,您需要对三个appender进行过滤,以排除INFO级别:使用拒绝INFO级别日志的LevelMatchFilter即可:

<filter type="log4net.Filter.LevelMatchFilter">
  <acceptOnMatch value="false" />
  <levelToMatch  value="INFO" />
</filter>

这正是我正在寻找的!!已经测试过了,它可以工作。无法感谢你的足够。 - Samurai Jack

5
请注意,<filter>标签(如上面的示例所示)必须出现在<appender>标签内!例如(这不是有效的log4net配置——我只是展示<filter>标签作为<appender>子条目的方式):
<configuration>
  <configSections>
    <section ...="" />
  </configSections>
  <startup>
    <supportedRuntime ...="" />
  </startup>
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{dd MMM yyyy HH:mm:ss} {%thread} %level - %message%newline%exception"/>
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <acceptOnMatch value="true" />
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>
    <root>
      <appender-ref ...="" />
    </root>
    <logger name="Log4NetTest.OtherClass">
      <level value="DEBUG"/>
      <appender-ref ref="ConsoleAppender"/>
    </logger>
  </log4net>
</configuration>

2
顶起来,因为指出了标签的正确位置以及DenyAllFilter - 这是阻止所有其他级别所必需的。 - Bertie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接