package it.paspiz85.nanobot.util; import java.io.PrintWriter; import java.io.StringWriter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; import javax.mail.Message; import javax.mail.internet.InternetAddress; /** * Handler for logging via mail. * * @author paspiz85 * */ public class MailLogHandler extends Handler { private final Logger logger = Logger.getLogger(getClass().getName()); @Override public void close() throws SecurityException { } @Override public void flush() { } @Override public void publish(final LogRecord record) { if (record.getLevel().intValue() < this.getLevel().intValue() || record.getLoggerName().equals(getClass().getName())) { return; } try { Mailer.instance().send( (message) -> { message.addRecipient(Message.RecipientType.TO, new InternetAddress("clash.nanobot+log." + record.getLevel().getName().toLowerCase() + "@gmail.com")); message.setSubject(record.getLevel() + ": " + record.getMessage()); String emailBody = "<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">"; emailBody += "<tr><td>Version</td><td>" + BuildInfo.instance().getVersion() + "</td></tr>"; emailBody += "<tr><td>BuildTime</td><td>" + BuildInfo.instance().getTimestamp() + "</td></tr>"; emailBody += "<tr><td>Time</td><td>" + record.getMillis() + "</td></tr>"; emailBody += "<tr><td>Thread</td><td>" + record.getThreadID() + "</td></tr>"; emailBody += "<tr><td>Logger</td><td>" + record.getLoggerName() + "</td></tr>"; emailBody += "<tr><td>Class</td><td>" + record.getSourceClassName() + "</td></tr>"; emailBody += "<tr><td>Method</td><td>" + record.getSourceMethodName() + "</td></tr>"; emailBody += "<tr><td>Level</td><td>" + record.getLevel() + "</td></tr>"; emailBody += "<tr><td>Message</td><td>" + record.getMessage() + "</td></tr>"; final Throwable e = record.getThrown(); if (e != null) { final StringWriter writer = new StringWriter(); e.printStackTrace(new PrintWriter(writer)); emailBody += "<tr><td>Exception</td><td>" + writer.toString().replace("\n", "<br/>") + "</td></tr>"; } emailBody += "</table>"; message.setContent(emailBody, "text/html"); }); } catch (final Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); } } }