我如何以编程方式检查某个附加过滤器的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
并向其添加器添加过滤器没有考虑过滤条件。
如何获取它以包括追加过滤器,还是有另一种查询方法?
我可能是错的,但是我不知道如何轻松地做到这一点。您可以做的是这样的:
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
(与所有过滤器一样),它包含一个方法和一个属性:
我知道这是一篇过时的文章,但是Stefan的回答有助于构建以下内容。我的用例是给定操作的性能自定义日志记录级别。显然,我们需要能够切换此级别的功能。
在我的特殊情况下,我们仅使用LevelMatchFilter,因此不会遇到其他过滤器类型的问题...