如何过滤在log4net的自定义级别? [英] How do I Filter on a custom Level in log4net?

查看:405
本文介绍了如何过滤在log4net的自定义级别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我复制了log4net的样本,以实现自定义日志级别,审计。我定义的审计有35000的值,DEBUG 30000和40000信息之间。

以下是我的配置部分。我有一个附加器记录所有级别和一个应该只记录审计级别(这只是用于测试)

 < log4net的>
  <附加目的地名称=FileAppenderTYPE =log4net.Appender.FileAppender>
    <文件值=testrun.log/>
    <布局类型=log4net.Layout.PatternLayout>
      < conversionPattern值=%DATE {HH:MM:SS:FFF} [%线程]%-5level%记录器{1}  - %消息%换行/>
    < /布局>
  < /附加器>
  <附加目的地名称=FileAppender.AuditTYPE =log4net.Appender.FileAppender>
    <滤波器类型=log4net.Filter.LevelMatchFilter>
      < levelToMatch值=审计/>
    < /滤光器>
    <文件值=testrun.audit.log/>
    <布局类型=log4net.Layout.PatternLayout>
      < conversionPattern值=%DATE {HH:MM:SS:FFF} [%线程]%-5level%记录器{1}  - %消息%换行/>
    < /布局>
  < /附加器>
  <根>
    <电平值=ALL/>
    <附加目的地-REF REF =FileAppender/>
    <附加目的地-REF REF =FileAppender.Audit/>
  < /根>
< / log4net的>
 

测试方法

 私有静态只读IAuditLog登录= AuditLogManager.GetLogger(typeof运算(计划));
公共静态无效的主要()
{
    log.Debug(调试);
    log.Audit(审计);
    log.Info(信息);
}
 

然而,附加目的地的输出是相同的...

  13:09:11:540 [9]调试程序 - 调试
13:09:11:560 [9]审计计划 - 审计
13:09:11:560 [9]广播节目 - 信息
 

解析LevelMatchFilter时,log4net的调试输出

  log4net的:加载追加程序[FileAppender.Audit]类型:[log4net.Appender.FileAppender]
log4net的:错误XmlHierarchyConfigurator:未知级别指定的[审计]
log4net的:WARN无法设置属性[levelToMatch]对象[log4net.Filter.LevelMatchFilter]利用价值[审计](可接受的转换类型)
log4net的:设置集合属性[AddFilter]反对[log4net.Filter.LevelMatchFilter]
 

解决方案

log4net的1.2.10版本,您需要结束<$​​ C $ C> LevelMatchFilter 链带 DenyAllFilter 如果你想我的问题描述的行为。

 &LT;附加目的地名称=FileAppender.AuditTYPE =log4net.Appender.FileAppender&GT;
  &LT;滤波器类型=log4net.Filter.LevelMatchFilter&GT;
    &LT; levelToMatch值=审计/&GT;
  &LT; /滤光器&gt;
  &LT;滤波器类型=log4net.Filter.DenyAllFilter/&GT;
  &LT;文件值=testrun.audit.log/&GT;
  &LT;布局类型=log4net.Layout.PatternLayout&GT;
    &LT; conversionPattern值=%DATE {HH:MM:SS:FFF} [%线程]%-5level%记录器{1}  - %消息%换行/&GT;
  &LT; /布局&GT;
&LT; /附加器&GT;
 

I copied the log4net samples to implement a custom log level, AUDIT. I defined AUDIT to have a value of 35000, between DEBUG 30000 and INFO 40000.

The following is my configuration section. I have one appender that logs all levels and one that is supposed to log only AUDIT levels (this is just for testing)

<log4net>
  <appender name="FileAppender" type="log4net.Appender.FileAppender" >
    <file value="testrun.log" />
    <layout type="log4net.Layout.PatternLayout" >
      <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" />
    </layout>
  </appender>
  <appender name="FileAppender.Audit" type="log4net.Appender.FileAppender" >
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="AUDIT" />
    </filter>
    <file value="testrun.audit.log" />
    <layout type="log4net.Layout.PatternLayout" >
      <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" />
    </layout>
  </appender>  
  <root>
    <level value="ALL" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="FileAppender.Audit" />
  </root>
</log4net>

The test method is

private static readonly IAuditLog log = AuditLogManager.GetLogger(typeof(Program));
public static void Main()
{
    log.Debug("Debug");
    log.Audit("Audit");
    log.Info("Info");
}

However, the output of the appenders is the same...

13:09:11:540 [9] DEBUG Program - Debug
13:09:11:560 [9] AUDIT Program - Audit
13:09:11:560 [9] INFO  Program - Info

The log4net debug output when parsing the LevelMatchFilter is

log4net: Loading Appender [FileAppender.Audit] type: [log4net.Appender.FileAppender]
log4net:ERROR XmlHierarchyConfigurator: Unknown Level Specified [AUDIT]
log4net:WARN Unable to set property [levelToMatch] on object [log4net.Filter.LevelMatchFilter] using value [AUDIT] (with acceptable conversion types)
log4net: Setting Collection Property [AddFilter] to object [log4net.Filter.LevelMatchFilter]

解决方案

log4net version 1.2.10 requires that you end a LevelMatchFilter chain with a DenyAllFilter if you want the behavior I described in the question.

<appender name="FileAppender.Audit" type="log4net.Appender.FileAppender" >
  <filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="AUDIT" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
  <file value="testrun.audit.log" />
  <layout type="log4net.Layout.PatternLayout" >
    <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" />
  </layout>
</appender>

这篇关于如何过滤在log4net的自定义级别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆