gpt4 book ai didi

log4net 过滤器 - 如何编写 AND 过滤器以忽略日志消息

转载 作者:行者123 更新时间:2023-12-03 21:15:59 24 4
gpt4 key购买 nike

我正在努力在 log4net 中编写 AND 条件过滤器。如果是 nLog,我可以这样写:

<logger name="*" minlevel="Info" xsi:type="NLogLoggerRule" writeTo="FooLogger" >
<filters>
<when condition="equals('${event-context:item=UserID}', 'TESTUSER')
and equals('${event-context:item=URL}','/foo/foobar.aspx')"
action="Ignore" />
</filters>
</logger>

我不确定如何在 log4net 中编写相同的过滤器。到目前为止,我已经成功地写了一个条件:

<appender>
....
<filter type="log4net.Filter.PropertyFilter">
<key value="URL" />
<stringToMatch value="/foo/foobar.aspx" />
<acceptOnMatch value="false" />
</filter>
</appender>

如何使用 log4net 过滤器编写 AND 条件?请帮忙。

最佳答案

支持 AND 条件的自定义过滤器。此类公开 Filter 属性,因此可以在此处使用现有的 log4net 过滤器,如果需要,还可以嵌套 AND 条件。

public class AndFilter : FilterSkeleton
{
private bool acceptOnMatch;
private readonly IList<IFilter> filters = new List<IFilter>();

public override FilterDecision Decide(LoggingEvent loggingEvent)
{
if (loggingEvent == null)
throw new ArgumentNullException("loggingEvent");

foreach(IFilter filter in filters)
{
if (filter.Decide(loggingEvent) != FilterDecision.Accept)
return FilterDecision.Neutral; // one of the filter has failed
}

// All conditions are true
if(acceptOnMatch)
return FilterDecision.Accept;
else
return FilterDecision.Deny;
}

public IFilter Filter
{
set { filters.Add(value); }
}

public bool AcceptOnMatch
{
get { return acceptOnMatch;}
set { acceptOnMatch = value;}
}
}

配置:

<filter type="Namespace.AndFilter, Assembly">
<filter type="log4net.Filter.PropertyFilter">
<key value="URL" />
<stringToMatch value="/foo/foobar.aspx" />
</filter>
<filter type="log4net.Filter.PropertyFilter">
<key value="UserID" />
<stringToMatch value="TESTUSER" />
</filter>
<acceptOnMatch value="false" />
</filter>

关于log4net 过滤器 - 如何编写 AND 过滤器以忽略日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8604041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com