- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直无法完全一致地重现这一点。我确实怀疑这是 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 的回调)。
hello! thread: mainhello! thread: NioProcessor-2
另一个 case 与另一个 appender 匹配,为简洁起见省略:
Action was taken was created for user / .
Created by machine: ip-10-212-90-140.ec2.internal Timestamp: February 19, 2013, 02:48:09.747 Logger source: me.unroll.logging.loggers.InfoEmail In application: Monitoring Client yahoo ============================Action was taken for user 12345 / test@gmail.com
Created by machine: ip-10-212-90-140.ec2.internal Timestamp: February 19, 2013, 15:24:06.016
“用户 ID/电子邮件”取自 MDC
- 这就是为什么我有显式打印线程的想法。从本质上讲,它看起来像是创建了相同的日志事件,一个来自主线程(logback 究竟是如何设法合并我的主线程的?不知道),另一个来自有问题的实际线程。
有没有人见过这种行为或知道如何解决?
最佳答案
也许我误解了你的问题,但正如我所看到的,logback 有时会在一封电子邮件中发送两个事件。这是设计使然,有一个 bufferSize 允许收集事件包,如果它们来得非常快。文档中有一段引述:
The SMTPAppender accumulates logging events in one or more fixed-size buffers and sends the contents of the appropriate buffer in an email after a user-specified event occurs. SMTP email transmission (sending) is performed asynchronously. By default, the email transmission is triggered by a logging event of level ERROR.
您将评估器更改为基于标记的。这意味着附加到记录器的先前事件将位于缓冲区中,直到标记的事件到来。
还要注意评估者如何触发电子邮件传输。
Thus, the number of logging events delivered in any e-mail sent by SMTPAppender is upper-bounded by 256.
如果您希望每封电子邮件只有一个事件,您应该将缓冲区大小更改为 1。但我怀疑如果消息的发送速度快于电子邮件的发送速度,它会丢弃消息:
The SMTPAppender keeps only the last 256 logging events in its cyclic buffer, throwing away older events when its buffer becomes full.
但据我所知,您可以将 asynchronousSending
更改为 false,这样它将阻止日志记录语句,直到消息被发送。
也许您可以在模式末尾添加“%n”,这样它将用新行分隔日志记录事件,这样它就可读了。
免责声明:我只是在阅读文档,从未亲自尝试过,所以不要相信,请在家尝试一下。
关于java - logback SMTPAppender 在不同线程上复制模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14971144/
我在尝试使用 SMTPAppender 时遇到一些问题。这是我关于 SMTPAppender 的属性文件: #Email config log4j.appender.mail=org.apache.l
如何在新的 Grails 2.4.5 项目中配置 SMTPAppender?在开发环境中运行时收到 NoClassDefFoundError: | Error log4j:ERROR Error in
我正在尝试使用下面的 log4j SMTPappender。错误。所有其他附加程序都工作正常。
如何为生成的电子邮件主题指定布局和转换模式? BufferSize 需要小于或等于 1,这样就不会发生缓冲。 最佳答案 CodeProject 文章 log4net NonBufferedSmtpAp
我们有一个 SmtpAppender 配置了自定义 RateLimiter 过滤器和 ERROR 日志级别,除了异常格式之外,一切都按预期工作,它们包括我们想要删除的源代码位置,在日志记录工具初始化后
我的问题与这两个类似: Log4j2: SMTPAppender does not send mails with error or fatal level How to send email not
我正在尝试将 Logback 与 SMTPAppender 结合使用作为我的日志记录解决方案。我在 appender 上附加了一个评估器,每记录 100 个错误就会触发发送一封电子邮件。在大多数情况下
我正在尝试将错误日志邮寄到 gmail。但是 logback 不发送任何邮件,我也没有收到任何错误,甚至我将用户名更改为随机无效邮件。我认为它不会尝试发送邮件。 我在 main 函数中记录了 500
在 Logback 的定义中 SMTPAppender ,您可以像这样指定电子邮件配置信息: my.smtp.host john.smith@example.com no-reply@example.
问候 Stackoverflow 用户, 我有一个使用 log4net 的 c# windows 服务,它会在出现错误时发送电子邮件。我们现在遇到了获取“预期”和“正常”错误的电子邮件的问题,这是出了
我正在使用 log4net。 当应用程序出错时,我想只针对错误发送电子邮件。我应该怎么做? 我的配置文件:
我发现 log4j2 中的 SMTPAppender 存在一些问题。每当创建级别为 error 或 fatal 的日志事件时 without 在 no mail 之前没有级别为 info 的事件被发送
我正在尝试使用 Logback 登录我的 Java 应用程序。我相信我已经正确配置了它,但是当记录错误时 INFO in ch.qos.logback.classic.net.SMTPAppender
我正在尝试使用带有一些附加信息的 logback 来发送错误日志。例如,当发生错误时,我想添加已登录应用程序的用户标签,最好在主题中添加。我知道如果登录用户存在,我可以捕获所有错误并将用户标签添加到错
我一直无法完全一致地重现这一点。我确实怀疑这是 logback 中的错误,但显然这听起来不太可能,在提交之前我需要一个干净的可重现测试用例,所以我问 SO 以防有人看到类似的行为。 基本上我有一个看起
我使用 log4j 发送异常电子邮件。 我的 log4j 配置: log4j.rootLogger=info, stdout, errmail log4j.appender.errmail=cz.to
我正在使用 log4j 的 SMTPAppender 在每次出现异常时通过电子邮件向我发送电子邮件,但我真的更喜欢它将电子邮件聚合到一封电子邮件中,其中包含一批错误,而不是每个错误都包含一封电子邮件。
如何限制 Logback 的电子邮件速率 SMTPAppender ,这样它最多每 n 分钟给我发一次电子邮件? 我已经根据 Logback appender 设置了我的日志记录,但我不太明白如何配置
我尝试使用这个配置:
Log4net 是否SMTPAppender异步发送电子邮件?如果没有,我如何异步发送日志记录电子邮件? 我的 log4net.config 是:
我是一名优秀的程序员,十分优秀!