Log4Net配置 - LevelMatchFilter

19

在log4net中有以下日志级别:

  • ALL
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • OFF

请问如何在log4net中仅记录INFO和ERRORDEBUG和ERROR的日志信息?我的意思是能够记录两个不连续的不同级别的日志信息。

如果我使用以下方法,将会记录warning消息,而我并不希望这样:

<filter type="log4net.Filter.LevelRangeFilter">
    <acceptOnMatch value="true" />
    <levelMin value="INFO" />
    <levelMax value="ERROR" />
</filter>

4个回答

32

使用LevelMatchFilter与DenyAllFilter相结合:

<filter type="log4net.Filter.LevelMatchFilter">
  <acceptOnMatch value="true" />
  <levelToMatch  value="INFO" />
</filter>
<filter type="log4net.Filter.LevelMatchFilter">
  <acceptOnMatch value="true" />
  <levelToMatch  value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

3
谢谢你提供的例子。只是提醒一下,acceptOnMatch 的默认值是 true,因此删除那些行后代码也可以正常工作。 - joshperry
1
@iffi,这在较新版本的log4net中根本不起作用。 - BradLaney
还没有人说过的是,<filter>标签(如上所示)必须出现在<appender>标签内!请参见下面我的额外答案。 - Jazimov

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>

3
对于那些@iffi的修复方法不起作用的BradLaney等人,请确保版本至少为1.2.11。这是错误报告:https://issues.apache.org/jira/browse/LOG4NET-137 另外,如果将lossy设置为true,则需要一个评估器,而LevelMatchFilter不是(它是一个过滤器)。所以以下方法适用于我:
    <filter type="log4net.Filter.LevelMatchFilter">
      <param name="LevelToMatch" value="WARN" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />s a

无法将其作为评论添加。

0

尝试:

<filter type="log4net.Filter.LevelRangeFilter">
    <levelToMatch value="INFO" />
    <acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.LevelRangeFilter">
    <levelToMatch value="ERROR" />
    <acceptOnMatch value="true" />
</filter>

谢谢Mike。我按照你说的做了,但是没有起作用。然后我在这个方向上做了更多的研究,找到了解决方法。请在回答部分查看解决方案。感谢你的帮助。 - iffi

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