9

这是一个包含我的 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 条日志消息。这是怎么回事?

4

3 回答 3

8

正如 Ceki 已经提到的那样,SMTPAPpender 会在 ERROR 级别的事件上触发电子邮件。要在一封邮件中获取所有日志,您可以增加缓冲区大小

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

于 2013-05-30T08:36:33.807 回答
5

外发电子邮件的触发由“评估者”计算。默认情况下,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;
 }
}
于 2013-05-30T07:51:29.397 回答
1

要在 WARN 处触发传出消息而不添加新的源文件,您可以添加 Janino 依赖项及其评估器:

<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>
于 2015-12-23T21:16:43.733 回答