AmazonSESSMTPAppender for Log4J
Log4J can easily send e-mail notifications every time an error occurs. It is particularly interesting and a very powerful functionality for production environments. However, the default SMTPAppender lacks support for SSL enabled SMTP servers and it is also not easily configurable according to the environment.
This is an enhanced version of the Original SMTPAppender, which supports SSL and is environment aware.
package com.dattein.logging;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import java.security.Security;
import java.util.Properties;
public class SMTPAppender extends org.apache.log4j.net.SMTPAppender {
public SMTPAppender() {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
}
@Override
protected boolean checkEntryConditions() {
//Obviously you have to use your own environment aware mechanisme, instead of the line below
return Environment.isProduction();
}
@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", getSMTPPort());
properties.put("mail.smtp.socketFactory.port", getSMTPPort());
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;
}
}
Finally, that is how you use it:
<appender name="mail-appender" class="com.dattein.logging.SMTPAppender">
<param name="SMTPHost" value="email-smtp.us-east-1.amazonaws.com">
<param name="SMTPUsername" value="<USERNAME>">
<param name="SMTPPassword" value="<PASSWORD>">
<param name="SMTPPort" value="465">
<param name="BufferSize" value="64">
<param name="Subject" value="[ERROR]">
<param name="To" value="errors@dattein.com">
<param name="From" value="donotreply@dattein.com">
<param name="Threshold" value="ERROR">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="My App [%p] %c{2} %x - %m%n">
</layout>
</appender>
<root>
<level value="DEBUG">
<appender-ref ref="mail-appender">
</appender-ref></level></root>
Written by Franklin Dattein
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Logging
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#