不能完全得到它
我使用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:xxxxyyyyyzzzzLog"/>
正如你所看到的,我试图通过LocationInfo键入日志记录事件的MethodName,但我仍然记录了所有事件。 编辑:正如在评论中提到的,我现在已经包含了我在RTFM之后添加的DenyAllFilter ;-)
任何人都可以协助
谢谢,
麦克K.
据我可以告诉log4net不知道属性 LocationInfo.MethodName。 我没有使用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:xxxxyyyyyzzzzLog"/>
链接地址: http://www.djcxy.com/p/45385.html
上一篇: can't quite get it
下一篇: Win32: Is there a replacement GDI32.dll that uses hardware acceleration?