java - Log4j smtp appender 只为所有错误发送一封电子邮件

标签 java log4j smtpappender

我有一个处理 ID 的程序。某些 ID 在 ETL 上出现多个错误。 我正在设置 log4j smtp 以在遇到错误或 fatal error 时发送电子邮件。 现在,它会针对一个程序运行的五个错误发送 5 封电子邮件。我想将它们汇总到一封电子邮件中。我设置了 log4j 属性而不是 xml。

属性。我躲来躲去

log4j.rootCategory=DEBUG,stdout,fileout, sendMail

log4j.appender.sendMail=org.apache.log4j.net.SMTPAppender
log4j.appender.sendMail.Threshold=Error
log4j.appender.sendMail.SMTPHost=mailhost
log4j.appender.sendMail.From=hidden
log4j.appender.sendMail.To=hidden
log4j.appender.sendMail.Subject=Failure
log4j.appender.sendMail.BufferSize=1
#log4j.appender.sendMail.evaluatorClass=TriggerLogEvent
log4j.appender.sendMail.layout=org.apache.log4j.PatternLayout
log4j.appender.sendMail.layout.ConversionPattern=%m

关于 log4j smtp appender 的信息不多。

最佳答案

如何创建另一个类来聚合错误消息并为该类创建一个新的记录器

所以首先你创建一个类来保存特定 id 的所有错误消息

public class TestLog4j {

static Logger log = Logger.getLogger(TestLog4j.class.getName());

int id;
ArrayList<String> errors,fatals;

public void addError(String e)
{

    this.errors.add(e);
}
public void addFatal(String f)
{

    this.fatals.add(f);
}

public void sendLogs() {

    SimpleDateFormat sdf = new SimpleDateFormat();

    for (String e : this.errors)
    {
         log.error("Error Message at "+sdf.format(new Date()) + " for id "+ this.id);
    }
    for (String f : this.fatals)
    {
          log.fatal("Fatal Message at "+sdf.format(new Date()) + " for id "+ this.id);
    }


    }

}

现在,您只需在确定所有消息都已聚合后调用 sendLogs 方法。 同样在您的 log4j.properties 中,您可以为此 TestLog4j 类添加另一个 smtpappender。你显然可以优化代码

log4j.properties

log4j.logger.package.TestLog4j = ERROR, sendmail
# turn off additivity
log4j.additivity.package.TestLog4j = false

关于java - Log4j smtp appender 只为所有错误发送一封电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33286626/

相关文章:

java - Tomcat 下的 Logback SMTP Appender 内存泄漏

java - Logback SMTPAppender找不到JNDI位置并启动

java - 如何不在 wicket 中呈现组件

java - 使用数组在 ImageView 上随机生成图像

java - 通过批处理文件运行 maven java 项目时忽略 log4j 属性

log4j - 需要一个通过属性配置 log4j RollingFileAppender 的工作示例

java - Log4J 转换说明符 "%l"不打印整个堆栈跟踪

java - 创建JavaApplet而不询问安全警告

java - 使用 Selenium 迭代表中的链接列表 - 第一次迭代工作正常,然后失败

java - 如何记录运行时异常?