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.
我复制了log4net示例以实现自定义日志级别AUDIT。我将AUDIT定义为值35000,介于DEBUG 30000和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)
以下是我的配置部分。我有一个appender记录所有级别和一个应该只记录AUDIT级别(这只是为了测试)
<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...
但是,appender的输出是相同的......
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
解析LevelMatchFilter时的log4net调试输出是
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]
2 个解决方案
#1
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.
如果您想要我在问题中描述的行为,则log4net版本1.2.10要求您使用DenyAllFilter结束LevelMatchFilter链。
<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>
#2
You will need to add
你需要添加
<level>
<name value="AUDIT" />
<value value="35000" />
</level>
in your log4net config section.
在你的log4net配置部分。
#1
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.
如果您想要我在问题中描述的行为,则log4net版本1.2.10要求您使用DenyAllFilter结束LevelMatchFilter链。
<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>
#2
You will need to add
你需要添加
<level>
<name value="AUDIT" />
<value value="35000" />
</level>
in your log4net config section.
在你的log4net配置部分。