【发布时间】:2013-02-20 02:07:28
【问题描述】:
我无法始终如一地重现这一点。我确实怀疑这是 logback 中的一个错误,但显然这听起来不太可能,在我提交之前我需要一个干净的可重现测试用例,所以我问一下,以防有人看到类似的行为。
基本上我有一个看起来像这样的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 到底是如何设法附加我的主线程的?不知道),另一个来自有问题的实际线程。
有没有人见过这种行为或知道如何解决?
【问题讨论】:
-
请在问题中添加 ch.qos.logback 版本。我个人对 1.0.x 有奇怪的问题。尝试更新到最新的稳定版本。
-
您也可以粘贴您的代码吗?这将是一个很大的帮助。
-
@JintianDENG 不幸的是,没有,这没有干净或简单地复制,并且需要很多类来正确设置。
-
@user1516873 是的,我使用的是 1.0.x,将确保它是最新的,看看是否有修复。
标签: java logback smtpappender