我确实使用此代码发出 10 条错误消息:
final Logger log = LoggerFactory.getLogger("myLogger");
for(int i = 0; i<10; i++)
log.error("myMessage" + i);
我将 logback.xml(见底部)配置为写入控制台并发送电子邮件。控制台说:
17:56:21.172 [http-bio-8443-exec-1] ERROR myLogger - myMessage0
17:56:21.174 [http-bio-8443-exec-1] ERROR myLogger - myMessage1
17:56:21.174 [http-bio-8443-exec-1] ERROR myLogger - myMessage2
17:56:21.174 [http-bio-8443-exec-1] ERROR myLogger - myMessage3
17:56:21.174 [http-bio-8443-exec-1] ERROR myLogger - myMessage4
17:56:21.174 [http-bio-8443-exec-1] ERROR myLogger - myMessage5
17:56:21.174 [http-bio-8443-exec-1] ERROR myLogger - myMessage6
17:56:21.174 [http-bio-8443-exec-1] ERROR myLogger - myMessage7
17:56:21.175 [http-bio-8443-exec-1] ERROR myLogger - myMessage8
17:56:21.175 [http-bio-8443-exec-1] ERROR myLogger - myMessage9
这是完美的。ch.qos.logback.classic.ViewStatusMessagesServlet 还显示了我的电子邮件,其中有 10 行说
INFO | SMTPAppender | About to send out SMTP message "ERROR myLogger myMessageNNN" to [xxx@xxx.yyy.com]
N 在 0 到 9 之间,但电子邮件的顺序被打乱到 7-0-9-2-8-1-4-3-5-6,这仍然可以。
但不幸的是,在我的电子邮件帐户中,我找到了 10 封相同的电子邮件,主题均为“ERROR myLogger myMessage8”和正文
ERROR myLogger
myMessage6
因此,与其发送 10 封电子邮件,不如将其中一封发送 10 次。更糟糕的是,该电子邮件的主题和正文并不对应。
所有 10 封电子邮件都具有完全相同的 Message-ID。
我用 logback 1.1.2、1.1.1 和 1.1.0(从 mvnrepository 获取)尝试了这个,它总是显示相同的行为。
我用我雇主的两台不同的 smtp 服务器进行了尝试,我确实通过 Thunderbird 和 SquirrelMail 进行了访问,但这没有什么区别。
如果我在每个 log.error 之前执行“Thread.sleep(1000)”,一切都会按预期工作,并且电子邮件非常好。
<configuration scan="true" scanPeriod="1 minute">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<smtpHost>xxx.yyy.com</smtpHost>
<to>xxx@xxx.yyy.com</to>
<from>xxx@xxx.yyy.com</from>
<subject>%-5level %logger{26} %m{50}</subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%level %logger%n%n%m%n%n%ex</pattern>
</layout>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="EMAIL"/>
</root>
</configuration>
我为此创建了一个 jira 问题:http: //jira.qos.ch/browse/LOGBACK-1032但 jira 看起来有点孤立。