Home > Java > Sending Exceptions Email Using Apache Log4J

Sending Exceptions Email Using Apache Log4J

Apache Log4J is being widely used for performing logging in Java Application, while doing logging we also encounter errors and we write log.error() statements. This statement indicates that an serious error has occurred while executing the Java code. In a critical application checking for this message at runtime is a tedious job but thanks to Apache Log4J, they provide an provision for sending emails whenever an error statement is executed.

SMTPAppender is the class that is responsible for performing email operation, it internally uses Java Mail API for sending mails.
This article will show you code snippets how can we send mail from Log4J.

SMTPAppender in Log4J.Properties File

log4j.logger.com.hiteshagrawal=ERROR, sendMail
log4j.additivity.sendMail=false
 
log4j.appender.sendMail=org.apache.log4j.net.SMTPAppender
log4j.appender.sendMail.To=<email id>
log4j.appender.sendMail.From=</email><email id>
log4j.appender.sendMail.SMTPHost=<mail hostname>
log4j.appender.sendMail.Subject=Log4J Message
log4j.appender.sendMail.layout=org.apache.log4j.PatternLayout
</mail></email>

Here i have set log4j settings for all java class having package “com.hiteshagrawal”, in this file you will be setting the SMTP hostname, to, from and the Mail Subject.

Your email:

 


SMTPAppender in Java Code
Similarly the same functionality can be achieved through java code as well

import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.net.SMTPAppender;
 
public class test {
	static Logger logger = Logger.getLogger(test.class);
	SMTPAppender appender = new SMTPAppender(); 
	public test() {
		try {
			appender.setTo("hitesh@hiiteshagrawal.com");
			appender.setFrom("admin@hiteshagrawal.com");
			appender.setSMTPHost("mail.mailbox.com");
			appender.setLocationInfo(true);
			appender.setSubject("Test Mail From Log4J");
			appender.setLayout(new PatternLayout());
			appender.activateOptions();
		    logger.addAppender(appender);			
		    logger.error("Hello World");
		}
		catch(Exception e) {
			e.printStackTrace();
			logger.error("Printing ERROR Statements",e);
		}
	} 
	public static void main(String args[]) {
		test a = new test();		
	}
}


Custom Search

Popular Articles:

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • email
  • IndianPad
  • LinkedIn
  • Live
  • MySpace
  • Netvibes
  • RSS
  • Technorati
  • Yahoo! Bookmarks
  • Yahoo! Buzz
  • Reddit
  • Add to favorites
  • PDF
  • Twitter
Categories: Java Tags:
  1. swagat
    January 20th, 2009 at 07:14 | #1

    this is good but is there any .jar files required to achieve so.
    coz its not working for me(log4j mail).

  2. Farhan
    February 20th, 2009 at 00:56 | #3

    in which platfrom this code will work ?
    Because it does not support or tags in log4j.properties file.
    In netbeans, following error occur:

    log4j:ERROR Could not parse address [].
    javax.mail.internet.AddressException: Extra route-addr in string “” at position 8
    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:659)
    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:569)
    at javax.mail.internet.InternetAddress.(InternetAddress.java:105)
    at org.apache.log4j.net.SMTPAppender.getAddress(Unknown Source)
    at org.apache.log4j.net.SMTPAppender.addressMessage(Unknown Source)
    at org.apache.log4j.net.SMTPAppender.activateOptions(Unknown Source)
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256)
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:132)
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:96)
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:654)
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:612)
    at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:533)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:417)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:441)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470)
    at org.apache.log4j.LogManager.(LogManager.java:122)
    at org.apache.log4j.Logger.getLogger(Logger.java:117)
    at com.test2.test2.(test2.java:18)
    log4j:ERROR Error occured while sending e-mail notification.
    javax.mail.SendFailedException: No recipient addresses
    at javax.mail.Transport.send0(Transport.java:148)
    at javax.mail.Transport.send(Transport.java:118)
    at org.apache.log4j.net.SMTPAppender.sendBuffer(Unknown Source)
    at org.apache.log4j.net.SMTPAppender.append(Unknown Source)
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
    at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    at org.apache.log4j.Category.callAppenders(Category.java:203)
    at org.apache.log4j.Category.forcedLog(Category.java:388)
    at org.apache.log4j.Category.error(Category.java:302)

    Please reply….as soon as possible

  3. May 21st, 2009 at 09:34 | #4

    Thank you very much for this post. It is short and precise. Looking forward for more good ones.

  4. July 6th, 2009 at 05:19 | #5

    hi hitesh this is not working in my system
    here is the error trace that i am receiving

    log4j:ERROR Error occured while sending e-mail notification.17:40:26,110 ERROR test:20 – Hello World

    com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. f42sm11437653rvb.50

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
    at javax.mail.Transport.send0(Transport.java:189)
    at javax.mail.Transport.send(Transport.java:118)
    at org.apache.log4j.net.SMTPAppender.sendBuffer(Unknown Source)
    at org.apache.log4j.net.SMTPAppender.append(Unknown Source)
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
    at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    at org.apache.log4j.Category.callAppenders(Category.java:203)
    at org.apache.log4j.Category.forcedLog(Category.java:388)
    at org.apache.log4j.Category.error(Category.java:302)
    at com.employee.recruitment.test.(test.java:20)
    at com.employee.recruitment.test.main(test.java:28)

    give me reply and suggestion to correct this example

    thanks
    Gajendra

  5. moin
    March 19th, 2010 at 21:16 | #6

    @Gajendra Choudhary
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    package log4jdemo;

    /**
    *
    * @author root
    */
    import java.security.Security;
    import java.util.Properties;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import org.apache.log4j.net.SMTPAppender;

    public class SMTPSSLAppender extends SMTPAppender {

    public SMTPSSLAppender() {
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    }

    @Override
    protected Session createSession() {
    Properties properties = new Properties();
    properties.setProperty(“mail.transport.protocol”, “smtp”);
    properties.setProperty(“mail.host”, getSMTPHost());
    properties.put(“mail.smtp.auth”, “true”);
    properties.put(“mail.smtp.port”, “465″);
    properties.put(“mail.smtp.socketFactory.port”, “465″);
    properties.put(“mail.smtp.socketFactory.class”,”javax.net.ssl.SSLSocketFactory”);
    properties.put(“mail.smtp.socketFactory.fallback”, “false”);
    properties.setProperty(“mail.smtp.quitwait”, “false”);
    Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication()
    { return new PasswordAuthentication(getSMTPUsername(),getSMTPPassword()); }
    });
    return session;
    }
    }

    use this class in propeties file instead of SMTPAppender it works

  6. chikubi
    June 23rd, 2010 at 16:31 | #7

    @moin
    Ty very much, it works really well :) !

  1. No trackbacks yet.