为什么Logback SMTPAppender只发送1封电子邮件?

时间:2013-05-30 02:32:56

标签: java logging logback smtpappender

这是一个包含我的Logback SMTPAppender

的代码段
<appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>WARN</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>NEUTRAL</onMismatch>
    </filter>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>

    <asynchronousSending>false</asynchronousSending>

    <smtpHost>my.smtp.host</smtpHost>
    <to>john.smith@example.com</to>
    <from>no-reply@example.com</from>
    <username>my_smtp_user</username>
    <password>my_smtp_password</password>
    <subject>%logger{20} - %m</subject>
    <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
        <bufferSize>1</bufferSize>
    </cyclicBufferTracker>
</appender>

执行以下Java时:

logger.warn("This is a warning.");
logger.error("This is an error.");

我只收到1封电子邮件。通过将bufferSize设置为1,我希望能够获得2封不同的电子邮件,每封邮件中包含1条单条日志消息。发生了什么事?

3 个答案:

答案 0 :(得分:8)

正如Ceki已经提到过SMTPAPpender会在级别错误的事件上触发电子邮件。要通过一封邮件获取所有日志,可以增加buffersize

10

这里通过将bufferSize增加到10,您将获得错误记录的最后10条消息。

检查以下链接: https://github.com/abdulwaheed18/Slf4jTutorial/blob/master/src/com/waheed/tutorial8/Application8.java https://github.com/abdulwaheed18/Slf4jTutorial/blob/master/sample8.xml

答案 1 :(得分:5)

传出电子邮件的触发由“evaluator”计算。默认情况下,SMTPAppender附带OnErrorEvaluator,可触发级别为ERROR或更高级别事件的电子邮件。因此,默认情况下,SMTPAppender将在第二条消息(级别为ERROR)而不是第一条消息(WARN)上发送电子邮件。要在WARN上触发传出消息,请编写自己的评估程序。这是代码:

public class OnWarnEvaluator extends EventEvaluatorBase<ILoggingEvent> {

 public boolean evaluate(ILoggingEvent event) throws NullPointerException,
           EvaluationException {
   return event.getLevel().levelInt >= Level.WARN_INT;
 }
}

答案 2 :(得分:1)

要在WARN触发传出消息而不添加新的源文件,您可以add the Janino dependency及其评估者:

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">

    <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
        <expression>return level >= WARN;</expression>
    </evaluator>
    ...
</appender>