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.
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(); } }
Popular Articles:
- JSP – Create Custom Tags
- HTTP POST File Content in JAVA
- Reading New Emails from Java Applications
- HTTP Form POST Request using AJAX and Servlet
- Reading IMAP Server Emails Using Java
- Reading Excel Sheet Documents in Java
- Ajax Programming with JSP and Servlets
- Modifying / Editing XML Document in JAVA
- Logging User Session details using Apache log4j
- JSON in JAVA



































this is good but is there any .jar files required to achieve so.
coz its not working for me(log4j mail).
Hi Swagat,
As i have written in POST you would require Apache Log4J Package to perform logging functionality and Java Mail API to send Mails.
Apache LOG4J: http://logging.apache.org/log4j/
Java Mail API: http://java.sun.com/products/javamail/
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
Thank you very much for this post. It is short and precise. Looking forward for more good ones.
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
@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
@moin
!
Ty very much, it works really well