Log4net LoggerMatchFilter - 如何仅在 "match whole word" 情况下进行过滤?
Log4net LoggerMatchFilter - How to filter only in "match whole word" case?
我正在使用 Log4net LoggerMatchFilter 仅记录来自某些 class 的信息。
问题是 loggerToMatch 属性 正在使用 StartsWith(string)
进行比较,结果我也从 classes 获得日志,它们的名称以我想要的 class 的名称开头。
我的配置包含类似的东西:
<filter type="log4net.Filter.LoggerMatchFilter">
<acceptOnMatch value="true" />
<loggerToMatch value="Class.Name.Space.MyClassName" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
在日志中,我还得到了来自 classes 的行,例如:
Class.Name.Space.MyClassName123
有没有办法用"match whole word"条件过滤?
(我的代码是 c# .Net 3.5)
您可以通过例如实现这样的 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, assembly)
<filter type="PFX.Logging.LoggerFullMatchFilter, Lib">
<acceptOnMatch value="true" />
<loggerToMatch value="Class.Name.Space.MyClassName" />
</filter>
我正在使用 Log4net LoggerMatchFilter 仅记录来自某些 class 的信息。
问题是 loggerToMatch 属性 正在使用 StartsWith(string)
进行比较,结果我也从 classes 获得日志,它们的名称以我想要的 class 的名称开头。
我的配置包含类似的东西:
<filter type="log4net.Filter.LoggerMatchFilter">
<acceptOnMatch value="true" />
<loggerToMatch value="Class.Name.Space.MyClassName" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
在日志中,我还得到了来自 classes 的行,例如: Class.Name.Space.MyClassName123
有没有办法用"match whole word"条件过滤? (我的代码是 c# .Net 3.5)
您可以通过例如实现这样的 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, assembly)
<filter type="PFX.Logging.LoggerFullMatchFilter, Lib">
<acceptOnMatch value="true" />
<loggerToMatch value="Class.Name.Space.MyClassName" />
</filter>