假设我将log4net记录器的minLevel
和maxLevel
分别设置为FATAL
和DEBUG
,但在某些情况下我想将{}中写入的日志项静音{1}}级别,并将所有其他级别保持在活动范围内。
是否有可能以某种方式使用“离散”级别的日志级别,而不是使用WARN
和minLevel
指定范围?
我认为这应该很简单,但我没有找到任何处理此问题的log4net文档或示例。
答案 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>