Log4Net从日志中过滤出INFO,仅显示DEBUG&错误

时间:2014-04-04 12:36:28

标签: log4net log4net-configuration log4net-appender log4net-filter

有没有办法从日志中过滤出INFO,只显示DEBUG&错误,使用web.config中的配置?

<root>
<level value="DEBUG" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="RollingFileSystemAppender" />
<appender-ref ref="ConsoleAppender" />
</root>

2 个答案:

答案 0 :(得分:8)

在log4X中,有些过滤器可以应用于appender以过滤消息;这是一个list of the filters

  • log4net.Filter.LevelMatchFilter 过滤与特定日志记录级别匹配的日志事件;或者,可以将其配置为过滤与特定日志记录级别不匹配的事件。
  • log4net.Filter.LevelRangeFilter 与LevelMatchFilter类似,不同之处在于它不会过滤单个日志级别,而是在包含范围的连续级别上进行过滤。
  • log4net.Filter.LoggerMatchFilter 根据发出事件的记录器对象的名称过滤日志事件。
  • log4net.Filter.StringMatchFilter 根据日志消息的字符串或正则表达式匹配过滤日志事件。
  • log4net.Filter.PropertyFilter 根据特定上下文属性的值或正则表达式匹配过滤日志事件。
  • log4net.Filter.DenyAllFilter 有效地删除了appender的所有日志记录事件。

在您的情况下,您需要过滤三个appender以排除INFO级别:LevelMatchFilter拒绝INFO级别日志将起作用:

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

答案 1 :(得分:3)

请注意,<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>