使用log4j通过SMTPAppender发送电子邮件报告

我正在尝试使用log4j发送包含来自后台进程的日志记录语句的可通过电子邮件发送的报告。 我想为每个进程运行发送一封电子邮件,而不是每封邮件语句都有一封电子邮件。 我查看了SMTPAppender ,但是在进程完成时没有看到手动发送报告的方法。 我相信TriggeringEventEvaluator可能是关键,但我遇到的一个问题是如何获取TriggeringEventEvaluator实例的句柄。 我坚持使用log4j 1.2.14并且在1.2.15中引入了SMTPAppender.getEvaluator()方法。 有什么想法吗? 我是否走在正确的轨道上? SMTPAppender.close()方法是否在这里发挥作用?

我希望能够做到这一点:

 log.info(message1); log.info(message2); log.info(message3); log.sendMail(); 

在考虑了这个之后,我想我需要澄清一下我希望完成的事情。 我正在尝试捕获运行石英作业的日志记录,并将生成的日志作为电子邮件发送。 quartz工作将一堆服务方法调用到各种服务中。 我想要包括那些服务方法执行的任何日志记录以及石英作业本身的日志记录。 我以为我可以做类似以下的事情来捕获所有日志记录,但它不起作用。

 // at the beginning of quartz job Logger logger = Logger.getRootLogger(); StringWriter sw = new StringWriter(); WriterAppender wa = new WriterAppender(new SimpleLayout(), sw); logger.addAppender(wa); // at the end of the quartz job String report = sw.toString(); 

你不应该使用任何log4j的方法,你应该正确配置它。

首先,在你的log4j.properties文件中正确定义你的appender:

 #CONFIGURE SMTP log4j.appender.email=org.apache.log4j.net.SMTPAppender log4j.appender.email.SMTPHost=mail.mydomain.com log4j.appender.email.SMTPUsername=myuser@mydomain.com log4j.appender.email.SMTPPassword=mypw log4j.appender.email.From=myuser@mydomain.com log4j.appender.email.To=myuser@mydomain.com log4j.appender.email.Subject=Log of messages log4j.appender.email.BufferSize=1 log4j.appender.email.EvaluatorClass=TriggerLogEvent log4j.appender.email.layout=org.apache.log4j.PatternLayout log4j.appender.email.layout.ConversionPattern=%m 

注意:从这篇文章中获取的代码。 可以在SMTPAppender API中获取更多信息。

接下来,创建一个专门用于发送电子邮件的类。 例:

 package com.foo.mailer; import org.apache.log4j.Logger; public class Mailer { private static final Logger logger = Logger.getLogger(Mailer.class); public void logMail(String mailString) { logger.info(mailString); } } 

接下来,为此类添加log4j.properties配置:

 # INFO level will be logged log4j.logger.com.foo.mailer = INFO, email # turn off additivity log4j.additivity.com.foo.mailer = false 

现在,每当您想使用log4j发送电子邮件时,请将其放入您的代码中:

 new Mailer().logMail("This mail should be sent"); 

免责声明 :我没有测试过任何此类代码。

如果您使用的是XML配置文件,则以下内容应该会有所帮助。