我无法始终如一地重现这一点。我确实怀疑这是 logback 中的一个错误,但显然这听起来不太可能,在我提交之前我需要一个干净的可重现的测试用例,所以如果有人看到类似的行为,我会问 SO。
基本上我有一个SMTPAppender
看起来像这样的:
<appender name="QA-SMTP"
class="ch.qos.logback.classic.net.SMTPAppender">
<!-- SMTP appends a default evaluator of on error, this is the simplest evaluator I found to implement -->
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>me.unroll.logging.loggers.InfoEmail.QA</marker>
</evaluator>
<smtpHost>smtp.gmail.com</smtpHost>
<smtpPort>465</smtpPort>
<SSL>true</SSL>
<username>test</username>
<password>test</password>
<from>test</from>
<to>test</to>
<subject>%message</subject>
<layout>
<pattern>hello! thread: %thread</pattern>
</layout>
</appender>
我收到的电子邮件看起来像这样。这没有发生 1)如果logger.error(...)
在线程上调用main
,或者 2)当我刚刚创建一个测试池并提交时,虽然它经常 - 但不是始终 - 发生在我发现它的实际生产案例中(其中正在接受来自 MINA 的回调)。
你好!线程:主你好!线程:NioProcessor-2
另一种情况与另一个附加程序匹配,为简洁起见省略:
已为用户 / 创建了操作。
由机器创建:ip-10-212-90-140.ec2.internal 时间戳:2013 年 2 月 19 日,02:48:09.747 记录器来源:me.unroll.logging.loggers.InfoEmail 在应用程序中:监控客户端 yahoo === ==========================对用户 12345 / test@gmail.com 采取了行动
机器创建:ip-10-212-90-140.ec2.internal 时间戳:2013 年 2 月 19 日,15:24:06.016
“用户 ID / 电子邮件”取自MDC
- 这就是为什么我有明确打印线程的想法。从本质上讲,它看起来像是创建了相同的日志事件,一个来自主线程(logback 到底是如何设法附加我的主线程的?不知道),另一个来自有问题的实际线程。
有没有人看到这种行为或知道如何解决?