I'm trying to use log4j to send emailable reports that contain the logging statements from a background process. I want one email sent for each process run, not one email for each logging statement. I've looked at the SMTPAppender
, but don't see a way to manually send the report when the process completes. I believe the TriggeringEventEvaluator
may be the key, but one issue I'm running into is how to get a handle to the TriggeringEventEvaluator
instance. I'm stuck using log4j 1.2.14 and the SMTPAppender.getEvaluator()
method was introduced in 1.2.15. Any thoughts? Am I even on the right track? Does the SMTPAppender.close()
method come into play here?
I want to be able to do this:
log.info(message1);
log.info(message2);
log.info(message3);
log.sendMail();
After thinking about this some more, I think I need to clarify what I'm hoping to accomplish. I'm trying to capture the logging from running a quartz job and send the resulting log as an email. The quartz job makes a bunch of service method calls into various services. I want the to include any logging those service methods perform as well as the logging of the quartz jobs itself. I was thinking I could do something like the following for capturing all the logging, but it isn't working.
// 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();
You shouldn't use any of log4j's methods, you should configure it properly instead.
First of all, define in your
log4j.properties
file your appender properly:Note: code taken from this post. More information can be obtained in SMTPAppender API.
Next, make a special class that will be used just for sending email. Example:
Next, put in
log4j.properties
configuration for this class:Now, whenever you want to send an email using log4j, put this in your code:
Disclaimer: I haven't tested any of this code.
If you are using an XML configuration file, the following should be helpful.