使用log4net丢弃范围内的多个日志级别

时间:2010-05-14 05:50:44

标签: log4net

假设我将log4net记录器的minLevelmaxLevel分别设置为FATALDEBUG,但在某些情况下我想将{}中写入的日志项静音{1}}级别,并将所有其他级别保持在活动范围内。

是否有可能以某种方式使用“离散”级别的日志级别,而不是使用WARNminLevel指定范围?

我认为这应该很简单,但我没有找到任何处理此问题的log4net文档或示例。

3 个答案:

答案 0 :(得分:7)

您可以在appender上使用LevelMatchFilter

示例:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="INFO" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="ERROR" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    ...
</appender>

此示例仅打印DEBUG; INFO和ERROR消息。可以根据您的需要轻松定制。

注意:最后不要忘记DenyAllFilter

答案 1 :(得分:2)

如何将log4net过滤器组合在一起以实现所需的输出,这很酷。默认情况下,所有日志条目都具有“中性”过滤器处置,默认情况下log4net会记录所有中性条目。

LevelRangeFilter将要做的是,如果条目的级别在范围内,它会将过滤器处置设置为“接受”(或者保留其处置,如果acceptOnMatch参数设置为false),它将标记所有不在“Deny”处置范围内的条目。

LevelMatchFilter会将levelToMatch参数中指定的过滤器的处置设置为“接受”,除非acceptToMatch设置为false,然后它会设置匹配“拒绝”的条目,无与伦比的条目将留给他们以前的。

所以你可以做的就是使用两个过滤器的组合来得到你想要的东西:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <filter type="log4net.Filter.LevelRangeFilter">
       <levelMax value="FATAL" />
       <levelMin value="ERROR" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="WARN" />
        <acceptOnMatch value="false" />
    </filter>
</appender>

这将允许您轻松地打开和关闭警告级别。范围之外的所有条目都已标记为“拒绝”,此处LevelMatchFilter会将WARN级别条目标记为拒绝,因此不需要DenyAllFilter

答案 2 :(得分:0)

使用LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter">
   <levelMax value="FATAL" />
   <levelMin value="ERROR" />
</filter>