我正在使用Log4net LoggerMatchFilter来仅记录某些类的信息。
事实是loggerToMatch属性使用StartsWith(string)
进行比较,结果我也从其名称以所需类名开头的类中获取日志。
我的配置包含以下内容:
<filter type="log4net.Filter.LoggerMatchFilter">
<acceptOnMatch value="true" />
<loggerToMatch value="Class.Name.Space.MyClassName" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
在日志中,我还从类似的类中获取行: Class.Name.Space.MyClassName123
有没有一种方法可以过滤“匹配整个单词”条件? (我的代码是c#.Net 3.5)
答案 0 :(得分:2)
您可以通过例如实现这样的Filter
。继承自LoggerMatchFilter
,因此您可以重用某些功能,同时使用完全相等比较覆盖匹配算法; loggingEvent.LoggerName == this.LoggerToMatch
。
借用Log4net的代码,看起来像:
namespace PFX.Logging
{
public class LoggerFullMatchFilter : log4net.Filter.LoggerMatchFilter
{
public override FilterDecision Decide(LoggingEvent loggingEvent)
{
if (loggingEvent == null)
{
throw new ArgumentNullException("loggingEvent");
}
if (this.LoggerToMatch != null
&& this.LoggerToMatch.Length != 0
&& loggingEvent.LoggerName == this.LoggerToMatch
)
{
if (this.AcceptOnMatch)
{
return FilterDecision.Accept;
}
return FilterDecision.Deny;
}
return FilterDecision.Neutral;
}
}
}
您可以在配置中使用此自定义过滤器,如下所示, 指定其完全合格的程序集名称( namespace.class,程序集)
<filter type="PFX.Logging.LoggerFullMatchFilter, Lib">
<acceptOnMatch value="true" />
<loggerToMatch value="Class.Name.Space.MyClassName" />
</filter>