【问题标题】:Log4Net LevelEvaluator Ignored when bufferSize greater than 1 for SmtpAppender当 SmtpAppender 的 bufferSize 大于 1 时忽略 Log4Net LevelEvaluator
【发布时间】:2012-11-06 15:44:49
【问题描述】:

我已经使用 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>

在我增加 bufferSize 之前,这非常有效。当我这样做时,所有级别都通过电子邮件发送,并且 log4net.Core.LevelEvaluator 似乎被忽略了。我也尝试过使用 LevelRangeFilter 和 LevelMatchFilter,但配置了这些后,我似乎根本没有收到任何电子邮件。

【问题讨论】:

    标签: log4net log4net-configuration


    【解决方案1】:

    评估器不会被忽略,但它不会按照您的预期进行:您的设置指示附加程序将所有日志消息放在缓冲区中,并且仅当记录了级别为 FATAL 的消息时才发送电子邮件。如果缓冲区已满,则最旧的消息将被丢弃(这是有损设置;没有它,您也会在缓冲区满后立即收到一封电子邮件)。

    如果要过滤消息,则需要使用过滤器。比如这样:

    <filter type="log4net.Filter.LevelMatchFilter">
       <acceptOnMatch value="true" />
       <levelToMatch  value="FATAL" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    

    我不确定我是否会考虑这样的邮件附加程序,因为如果我的应用程序出现需要以 FATAL 级别记录的问题,我希望立即得到通知。

    【讨论】:

    • 感谢 Stefan,直到生成 FATAL 时我才收到所有日志,这让我不胜感激。现在我明白了,该配置实际上对我很有效!再次感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多