使用log4net删除一定范围内的多个日志级别

5
假设我将log4net记录器的minLevelmaxLevel分别设置为FATALDEBUG,但在某些情况下,我想消除WARN级别中写入的日志项,并保持范围内的所有其他级别处于活动状态。是否可能以某种方式使用离散的日志级别,而不是使用minLevelmaxLevel指定范围?我认为这应该很简单,但我没有找到任何处理此问题的log4net文档或示例。
3个回答

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


嗨!感谢您的快速回复。 它可以通过编程完成吗?我只找到了更改Logger(根)日志级别的方法,而不是每个appender的方法。 - Harel Moshe
抱歉,我错过了你的评论。这也应该可以通过编程实现。在这里,您可以看到如何访问所有附加器:https://dev59.com/zXA75IYBdhLWcg3w8-BJ#3031867 - Stefan Egli

2
很酷的是log4net过滤器可以组合使用以达到所需输出。默认情况下,所有日志条目都具有“中性”过滤器设置,并且log4net默认记录所有中性条目。 LevelRangeFilter的作用是,如果条目的级别在范围内,则将过滤器设置为“接受”(或者如果将acceptOnMatch参数设置为false,则保留其原来的设置),并将所有不在范围内的条目标记为“拒绝”。 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


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

2
嘿,因为这是自然的用法形式,我尝试了这个选项,但它强制我记录级别在致命和错误之间的消息,而我不想要(即使错误和致命相邻,原则仍然适用)。 无论如何还是谢谢! - Harel Moshe

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