Log4Net以编程方式检查IsEnabledFor是否有Appender过滤器

问题描述 投票:3回答:2

我如何以编程方式检查某个附加过滤器的IsEnabledFor是否为true

这是我的配置:

<log4net>
 <root>
  <level value="ALL" />
  <appender-ref ref="appender" />
 </root>

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

<log4net>

[好,如果我将<root>级别设置为ERROR并执行IsEnabledFor(Debug),则返回true,但是如果我将<root>级别设置为ALL并向其添加器添加过滤器没有考虑过滤条件。

如何获取它以包括追加过滤器,还是有另一种查询方法?

c# log4net log4net-configuration
2个回答
1
投票

我可能是错的,但是我不知道如何轻松地做到这一点。您可以做的是这样的:

var hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null) 
{       
    var appenders = hierarchy.GetAppenders();
    foreach( IAppender appender in appenders)
    {
        var appenderSkeleton = a as AppenderSkeleton
        if (appenderSkeleton != null)
        {
            IFilter filterHead = appenderSkeleton.FilterHead;
            // now analyse the filter chain
        }        
    }
}

我没有测试此代码,但是它应该或多或少地起作用。通过这种方式,您可以得到从AppenderSkeleton派生的所有附加程序的所有已配置过滤器链的头部。过滤器链的头部实现IFilter(与所有过滤器一样),它包含一个方法和一个属性:


1
投票

我知道这是一篇过时的文章,但是Stefan的回答有助于构建以下内容。我的用例是给定操作的性能自定义日志记录级别。显然,我们需要能够切换此级别的功能。

在我的特殊情况下,我们仅使用LevelMatchFilter,因此不会遇到其他过滤器类型的问题...

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.