package de.skuzzle.polly.core.internal.mail; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Layout; import org.apache.log4j.Level; import org.apache.log4j.spi.LoggingEvent; import de.skuzzle.polly.core.internal.mail.senders.MailSender; import de.skuzzle.polly.sdk.time.Time; public class EMailLogAppender extends AppenderSkeleton { private final static String SUBJECT = "[POLLY Logging] Encountered LogEvent with level '%s'"; private MailSender sender; private Level threshold; private String subject; private long lastSent; private int delay; private Layout formatter; public EMailLogAppender(MailSender sender, Level threshold, int delay, Layout formatter) { this.sender = sender; this.threshold = threshold; this.subject = String.format(SUBJECT, threshold.toString()); this.delay = delay; this.formatter = formatter; } @Override public void close() {} @Override public boolean requiresLayout() { return false; } @Override protected void append(LoggingEvent le) { if (Time.currentTimeMillis() - this.lastSent < this.delay) { return; } if (le.getLevel().isGreaterOrEqual(this.threshold)) { this.lastSent = Time.currentTimeMillis(); String message = this.formatter.format(le); try { this.sender.sendMail(this.subject, message); } catch (Exception e) { e.printStackTrace(); } } } }