如何配置log4net SmtpAppender以仅在达到某个级别时向我发送电子邮件?

Dan*_* T. 5 logging log4net log4j

我正在尝试配置一个log4net SmtpAppender,这样我只会在遇到某个日志级别时收到一封电子邮件,但是包含所有级别的最后10行.这是我的配置:

<appender name="EmailAppender" type="SmtpSubjectLayoutAppender">

  <evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="WARN"/>
  </evaluator>

  <bufferSize value="10" />
  <lossy value="false" />

  ...
</appender>
Run Code Online (Sandbox Code Playgroud)

我用这段代码练习它:

for (var i = 1; i <= 30; i++)
{
    logger.Info("This is just a test message " + i);
}

logger.Error("Error message");
Run Code Online (Sandbox Code Playgroud)

问题是我最终收到3封电子邮件,其中2封包含所有INFO日志记录,另一封包含最后几行之前发生的邮件ERROR:

[2012-07-27 18:59:55.657][INFO ][Chase][tid=14972] This is just a test message 23
[2012-07-27 18:59:55.659][INFO ][Chase][tid=14972] This is just a test message 24
[2012-07-27 18:59:55.661][INFO ][Chase][tid=14972] This is just a test message 25
[2012-07-27 18:59:55.662][INFO ][Chase][tid=14972] This is just a test message 26
[2012-07-27 18:59:55.664][INFO ][Chase][tid=14972] This is just a test message 27
[2012-07-27 18:59:55.666][INFO ][Chase][tid=14972] This is just a test message 28
[2012-07-27 18:59:55.667][INFO ][Chase][tid=14972] This is just a test message 29
[2012-07-27 18:59:55.670][INFO ][Chase][tid=14972] This is just a test message 30
[2012-07-27 18:59:55.671][ERROR][Chase][tid=14972] Error message
Run Code Online (Sandbox Code Playgroud)

如何配置appender以便在发生WARN或更高版本的情况下收到包含最后10行的电子邮件,否则忽略缓冲区?

Ste*_*gli 5

您需要将有损值设置为true:

<lossy value="true" />
Run Code Online (Sandbox Code Playgroud)

在配置中,log4net不仅在记录错误时而且还在缓冲区已满时写入缓冲区。有损标志告诉log4net必要时丢弃消息。