我使用 log4net 来记录我的 Web 应用程序的进度,使用 Log4PostSharp 来 AOP 注入所有方法。这达到了记录(几乎)所有内容的预期效果,并且很好。
我现在需要将 Page_Load 方法记录到文件/控制台。显然,我可以限制 log4postsharp 类来做到这一点,但那样我就会失去所有其他日志记录。
我一直在查看 log4net 中的过滤器,从 StringMatch 过滤器开始,但这只查看正在记录的消息,并且我在方法名称之后。这让我进入了 PropertyFilter,但仍然没有任何乐趣。我的 log4net.config 片段如下:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.PropertyFilter">
<key value="LocationInfo.MethodName"/>
<stringToMatch value="Page_Load"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<file value="d:\\xxxx\\yyyyy\\zzzzLog"/>
正如您所看到的,我尝试通过 LocationInfo 输入日志记录事件的 MethodName,但我仍然记录了所有内容。编辑:正如评论中提到的,我现在已经包含了在 RTFM 之后添加的 DenyAllFilter ;-)
有人可以帮忙吗?
谢谢你,
Mike K.
据我所知 log4net 不知道property 位置信息.方法名称。我没有使用 Log4PostSharp,因此我无法确定 Log4PostSharp 是否会创建此属性。
我会像这样编写自己的过滤器来按方法名称进行过滤(省略正则表达式部分):
public class MethodNameFilter : StringMatchFilter
{
override public FilterDecision Decide(LoggingEvent loggingEvent)
{
if (loggingEvent == null)
{
throw new ArgumentNullException("loggingEvent");
}
var locationInfo = loggingEvent.LocationInformation;
// Check if we have been setup to filter
if (locationInfo == null || (m_stringToMatch == null && m_regexToMatch == null))
{
// We cannot filter so allow the filter chain
// to continue processing
return FilterDecision.Neutral;
}
if (m_stringToMatch != null)
{
// Check substring match
if (locationInfo.MethodName.IndexOf(m_stringToMatch) == -1)
{
// No match, continue processing
return FilterDecision.Neutral;
}
// we've got a match
if (m_acceptOnMatch)
{
return FilterDecision.Accept;
}
return FilterDecision.Deny;
}
return FilterDecision.Neutral;
}
}
注意:访问LocationInfo是昂贵的并对性能产生显着影响。您可以考虑修改 Log4PostSharp 以在编织过程中提取方法名称并将其存储在某个属性中。在这种情况下,您可以按预期使用属性过滤器,并且不会对性能产生任何影响。不确定这是否真的有效,但我希望这是可能的。
配置看起来像这样:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="YourNameSpace.MethodNameFilter">
<stringToMatch value="Page_Load"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<file value="d:\\xxxx\\yyyyy\\zzzzLog"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)