2

我有一个 JBOSS 批处理应用程序,有时会在一分钟内向同一个电子邮件地址发送数百封电子邮件,但出现 Log4J 错误。这会导致 Gmail 出现问题,因为它表示我们为该 gmail 帐户发送电子邮件的速度过快。

所以我想知道是否有一种方法可以基本上创建一个“摘要”或“聚合”电子邮件,将所有错误日志放在一封电子邮件中,并每 5 分钟发送一次。因此,每 5 分钟我们可能会收到一封大电子邮件,但至少我们实际上收到了这封电子邮件,而不是因为 gmail 服务器拒绝它而延迟了数小时和数小时。

我读了这篇文章,其中建议使用评估器来做到这一点,但我看不到在 Log4J xml 配置文件中是如何配置的。无论如何,它似乎也无法将所有日志“消化”到 1 封电子邮件中。

有没有人这样做过?或者知道有没有可能?

4

2 回答 2

4

从(存档的)SMTPAppender 使用页面:

设置此属性

log4j.appender.myMail.evaluatorClass = com.mydomain.example.MyEvaluator

现在您必须创建评估器类并实现org.apache.log4j.spi.TriggeringEventEvaluator接口并将该类放置在 log4j 可以访问它的路径中。

//Example TriggeringEventEvaluator impl

package com.mydomain.example;

import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.TriggeringEventEvaluator;

public class MyEvaluator implements TriggeringEventEvaluator {

    public boolean isTriggeringEvent(LoggingEvent event) { 
        return true; 
    }

} 

您必须在此方法中编写评估器逻辑。

于 2010-08-30T11:52:20.710 回答
0

我为 log4j2 创建了一个免费可用的解决方案,带有ExtendedSmtpAppender.
(如果您仍然使用 log4j 1.x,只需将您的替换log4j-1.x.jarlog4j-1.2-api-2.x.jar- 和log4j-core-2.x.jar+log4j-api-2.x.jar当然。)

您可以从 Maven Central 获得它de.it-tw:log4j2-extras(这需要 Java 7+ 和 log4j 2.8+)。
如果您仅限于 Java 6(因此是 log4j 2.3),请使用de.it-tw:log4j2-Java6-extras

此外,请参阅 GitLab 项目: https ://gitlab.com/thiesw/log4j2-extras (或 https://gitlab.com/thiesw/log4j2-Java6-extras


[旧文本:
如果您使用 log4j2,请参阅其他堆栈溢出问题的答案:https ://stackoverflow.com/a/34072704/5074004

或者直接转到 https://issues.apache.org/jira/browse/LOG4J2-1192
中提供的我的外部但公开可用的解决方案 ]

于 2015-12-03T17:51:55.833 回答