这是一个包含我的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条单条日志消息。发生了什么事?
答案 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>