相关疑难解决方法(0)

Log4Net LevelEvaluator当smtpAppender的bufferSize大于1时忽略

我已经使用RollingLogFileAppender和SmtpAppender配置了log4net,目的是将DEBUG级别记录到RollingLogFileAppender,并将FATAL记录到SmtpAppender:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="test@test.com" />
  <from value="test@test.com" />
  <subject value="Fatal Error" />
  <smtpHost value="smtp.test.com" />
  <SMTPPort value="366"/>
  <Username value="test@test.com"/>
  <Password value="password"/>      
  <bufferSize value="1" />
  <lossy value="true" />
  <evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="FATAL"/>
  </evaluator>      
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline"                             />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
  <appender-ref ref="SmtpAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)

这完全有效,直到我增加bufferSize.当我这样做时,所有级别都通过电子邮件发送,log4net.Core.LevelEvaluator似乎被忽略.我也尝试过使用LevelRangeFilter和LevelMatchFilter但是这些配置似乎根本没有收到任何电子邮件.

log4net log4net-configuration

11
推荐指数
1
解决办法
3214
查看次数

如何在log4net中过滤自定义级别?

我复制了log4net示例以实现自定义日志级别AUDIT.我将AUDIT定义为值35000,介于DEBUG 30000和INFO 40000之间.

以下是我的配置部分.我有一个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>
Run Code Online (Sandbox Code Playgroud)

测试方法是

private static readonly IAuditLog log = AuditLogManager.GetLogger(typeof(Program));
public static void Main()
{
    log.Debug("Debug");
    log.Audit("Audit");
    log.Info("Info");
} …
Run Code Online (Sandbox Code Playgroud)

.net configuration logging log4net

10
推荐指数
2
解决办法
1万
查看次数