AmazonSESSMTPAppender para Log4J

O Log4J pode facilmente enviar notificações por e-mail sempre que ocorrer um erro. É particularmente interessante e uma funcionalidade muito poderosa para ambientes de produção. No entanto, o SMTPAppender padrão não tem suporte para servidores SMTP habilitados para SSL e também não é facilmente configurável de acordo com o ambiente.
Esta é uma versão aprimorada do SMTPAppender original, que oferece suporte a SSL e reconhece o ambiente.

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;
}
}

Finalmente, é assim que você o usa:

<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>