Java Log4J SMTP摘要/聚合电子邮件?

Java Log4J SMTP摘要/聚合电子邮件?,java,smtp,log4j,aggregate,digest,Java,Smtp,Log4j,Aggregate,Digest,我有一个JBOSS批处理应用程序,有时会在一分钟内发送数百封电子邮件到同一个电子邮件地址,并出现Log4J错误。这导致了Gmail的问题,因为它说我们发送电子邮件的速度太快了 所以我想知道是否有一种方法可以基本上创建一封“摘要”或“聚合”电子邮件,将所有错误日志放在一封电子邮件中,每5分钟发送一次。因此,每5分钟我们可能会收到一封大邮件,但至少我们实际上收到了这封邮件,而不是被gmail服务器拒绝了几个小时 我读过这篇文章,其中建议使用一个计算器来实现这一点,但我看不出在log4jxml配置文件

我有一个JBOSS批处理应用程序,有时会在一分钟内发送数百封电子邮件到同一个电子邮件地址,并出现Log4J错误。这导致了Gmail的问题,因为它说我们发送电子邮件的速度太快了

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

我读过这篇文章,其中建议使用一个计算器来实现这一点,但我看不出在log4jxml配置文件中是如何配置的。它似乎也无法将所有日志“消化”到一封电子邮件中

以前有人这样做过吗?或者知道是否可能?

从(存档)页面:

设置此属性

log4j.appender.myMail.evaluatorClass = com.mydomain.example.MyEvaluator
现在您必须创建evaluator类并实现
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; 
    }

} 

您必须在这个方法中编写计算器逻辑。

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

您可以从Maven Central as获得它(这需要Java 7+和log4j 2.8+。
如果您仅限于Java6(因此也限于Log4J2.3),那么使用

此外,请参见GitLab项目:(或)


[旧文本:
如果使用log4j2,请参阅其他堆栈溢出问题的答案:

或者直接转到我在

]

谢谢您的帮助,看起来它可以胜任这项工作。最后我关掉了电子邮件,因为它已经失控了。但是,如果我需要重新打开它,这肯定会有帮助!我一直在想为什么我的电子邮件追加器不工作。如果log4jxsd能够提供关于错误配置的反馈,那么它可能会更好。将阈值或记录器级别与SMTPAppender结合起来,而不引发异常,这确实令人困惑。而改变SMTPAppender日志记录级别的唯一方法实际上是实现并提供TriggeringEventEvaluator。