z60010232 发表于 2013-2-7 16:02:08

log email的使用.

HTML格式:

package com.just.zb.email.log;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.log4j.Layout;import org.apache.log4j.Level;import org.apache.log4j.helpers.Transform;import org.apache.log4j.spi.LocationInfo;import org.apache.log4j.spi.LoggingEvent;public class EmailHTMLLayout extends Layout{protected   int BUF_SIZE = 256;protected   int MAX_CAPACITY = 1024;static String TRACE_PREFIX = "<br>    ";private StringBuffer sbuf;/** @deprecated */public static final String LOCATION_INFO_OPTION = "LocationInfo";public static final String TITLE_OPTION = "Title";boolean locationInfo;String title;public EmailHTMLLayout(){    this.BUF_SIZE = 256;    this.MAX_CAPACITY = 1024;    this.sbuf = new StringBuffer(256);    this.locationInfo = false;    this.title = "Log4J Log Messages";}public void setLocationInfo(boolean flag){    this.locationInfo = flag;}public boolean getLocationInfo(){    return this.locationInfo;}public void setTitle(String title){    this.title = title;}public String getTitle(){    return this.title;}public String getContentType() {return "text/html;charset=GBK";}public void activateOptions(){} private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public String format(LoggingEvent event){    if (this.sbuf.capacity() > 1024)      this.sbuf = new StringBuffer(256);    else {      this.sbuf.setLength(0);    }    this.sbuf.append(Layout.LINE_SEP + "<tr>" + Layout.LINE_SEP);    this.sbuf.append("<td>");    this.sbuf.append( format.format(new Date(event.timeStamp)));    this.sbuf.append("</td>" + Layout.LINE_SEP);    String escapedThread = Transform.escapeTags(event.getThreadName());    this.sbuf.append("<td title=\"" + escapedThread + " thread\">");    this.sbuf.append(escapedThread);    this.sbuf.append("</td>" + Layout.LINE_SEP);    this.sbuf.append("<td title=\"Level\">");    if (event.getLevel().equals(Level.INFO)) {      this.sbuf.append("<font color=\"#339933\">");      this.sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));      this.sbuf.append("</font>");    }    else if (event.getLevel().isGreaterOrEqual(Level.WARN)) {      this.sbuf.append("<font color=\"#dc143c\"><strong>");      this.sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));      this.sbuf.append("</strong></font>");    } else {      this.sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));    }    this.sbuf.append("</td>" + Layout.LINE_SEP);      StringBuffer buff= new StringBuffer("");    buff.append(event.getLocationInformation().getClassName() );    buff.append(".");    buff.append(event.getLocationInformation().getMethodName() );    buff.append("(");    buff.append(event.getLocationInformation().getFileName() );    buff.append(":");    buff.append(event.getLocationInformation().getLineNumber());    buff.append(")");   //System.out.println(buff);            String lineLoger = Transform.escapeTags(buff.toString());    this.sbuf.append("<td title=\"" + lineLoger + " category\">");    this.sbuf.append(lineLoger);    this.sbuf.append("</td>" + Layout.LINE_SEP);    if (this.locationInfo) {      LocationInfo locInfo = event.getLocationInformation();      this.sbuf.append("<td>");      this.sbuf.append(Transform.escapeTags(locInfo.getFileName()));      this.sbuf.append(':');      this.sbuf.append(locInfo.getLineNumber());      this.sbuf.append("</td>" + Layout.LINE_SEP);    }    this.sbuf.append("<td title=\"Message\">");    this.sbuf.append(Transform.escapeTags(event.getRenderedMessage()));    this.sbuf.append("</td>" + Layout.LINE_SEP);    this.sbuf.append("</tr>" + Layout.LINE_SEP);    if (event.getNDC() != null) {      this.sbuf.append("<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">");      this.sbuf.append("NDC: " + Transform.escapeTags(event.getNDC()));      this.sbuf.append("</td></tr>" + Layout.LINE_SEP);    }    String[] s = event.getThrowableStrRep();    if (s != null) {      this.sbuf.append("<tr><td bgcolor=\"#87ceeb\" style=\"color:White; font-size : xx-small;\" colspan=\"6\">");      appendThrowableAsHTML(s, this.sbuf);      this.sbuf.append("</td></tr>" + Layout.LINE_SEP);    }    return this.sbuf.toString();}void appendThrowableAsHTML(String[] s, StringBuffer sbuf) {    if (s != null) {      int len = s.length;      if (len == 0)      return;      sbuf.append(Transform.escapeTags(s));      sbuf.append(Layout.LINE_SEP);      for (int i = 1; i < len; ++i) {      sbuf.append(TRACE_PREFIX);      sbuf.append(Transform.escapeTags(s));      sbuf.append(Layout.LINE_SEP);      }    }}public String getHeader(){    StringBuffer sbuf = new StringBuffer();    sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" + Layout.LINE_SEP);    sbuf.append("<html>" + Layout.LINE_SEP);    sbuf.append("<head>" + Layout.LINE_SEP);    sbuf.append("<title>" + this.title + "</title>" + Layout.LINE_SEP);    sbuf.append("<style type=\"text/css\">" + Layout.LINE_SEP);    sbuf.append("<!--" + Layout.LINE_SEP);    sbuf.append("body, table {font-family: arial,sans-serif; font-size: x-small;}" + Layout.LINE_SEP);    sbuf.append("th {background: #336699; color: #FFFFFF; text-align: left;}" + Layout.LINE_SEP);    sbuf.append("-->" + Layout.LINE_SEP);    sbuf.append("</style>" + Layout.LINE_SEP);    sbuf.append("</head>" + Layout.LINE_SEP);    sbuf.append("<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">" + Layout.LINE_SEP);    sbuf.append("<hr size=\"1\" noshade>" + Layout.LINE_SEP);    sbuf.append("Log session start time " + new Date() + "<br>" + Layout.LINE_SEP);    sbuf.append("<br>" + Layout.LINE_SEP);    sbuf.append("<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP);    sbuf.append("<tr>" + Layout.LINE_SEP);    sbuf.append("<th>Time</th>" + Layout.LINE_SEP);    sbuf.append("<th>Thread</th>" + Layout.LINE_SEP);    sbuf.append("<th>Level</th>" + Layout.LINE_SEP);    sbuf.append("<th>Category</th>" + Layout.LINE_SEP);    if (this.locationInfo) {      sbuf.append("<th>File:Line</th>" + Layout.LINE_SEP);    }    sbuf.append("<th>Message</th>" + Layout.LINE_SEP);    sbuf.append("</tr>" + Layout.LINE_SEP);    return sbuf.toString();}public String getFooter(){    StringBuffer sbuf = new StringBuffer();    sbuf.append("</table>" + Layout.LINE_SEP);    sbuf.append("<br>" + Layout.LINE_SEP);    sbuf.append("</body></html>");    return sbuf.toString();}public boolean ignoresThrowable(){    return false;}} 发送模式

package com.just.zb.email.log;import org.apache.log4j.net.SMTPAppender;import org.apache.log4j.spi.LoggingEvent;public class EmailSMTPAppender extends SMTPAppender {public void append(LoggingEvent event) {if (!checkEntryConditions()) {return;}event.getThreadName();event.getNDC();event.getMDCCopy();if (this.getLocationInfo()) {event.getLocationInformation();}cb.add(event);if (evaluator.isTriggeringEvent(event)) {if (cb.length() > this.getBufferSize()-24) {sendBuffer();}}}public EmailSMTPAppender() {super();Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {if (cb.length() > 0) {sendBuffer();}}});}} LOG等级

package com.just.zb.email.log;import org.apache.log4j.Level;import org.apache.log4j.spi.LoggingEvent;import org.apache.log4j.spi.TriggeringEventEvaluator;public class EmailTriggeringEventEvaluator implements TriggeringEventEvaluator {public boolean isTriggeringEvent(LoggingEvent paramLoggingEvent ) {return paramLoggingEvent.getLevel().isGreaterOrEqual(Level.INFO);}}配置文件

log4j.rootCategory=INFO,CONSOLE,FILE,EMAILlog4j.category.com.just=INFO #log4j.rootCategory=DEBUG,CONSOLE,FILE #log4j.category.com.just=DEBUGlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=[%p]: %d{yyyy-MM-dd HH:mm:ss} %n   |_: %m %n   |_ : %l%n%nlog4j.appender.FILE=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.FILE.file=log/utils.loglog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.FILE.layout.ConversionPattern=[%p]: %d{yyyy-MM-dd HH:mm:ss} %n   |_: %m %n   |_ : %l%n%nlog4j.appender.EMAIL=com.just.zb.email.log.EmailSMTPAppenderlog4j.appender.EMAIL.Threshold=INFOlog4j.appender.EMAIL.BufferSize=1024log4j.appender.EMAIL.To=zhongbin@just-tech.com.cnlog4j.appender.EMAIL.From=www.just-tech.com.cnlog4j.appender.EMAIL.Subject=SYSTEM ERROR[ TEST ]log4j.appender.MAIL.SMTPDebug=truelog4j.appender.EMAIL.SMTPHost=mail.just-tech.com.cn#log4j.appender.EMAIL.SMTPUsername=youemail#log4j.appender.EMAIL.SMTPPassword=youpwlog4j.appender.EMAIL.EvaluatorClass=com.just.zb.email.log.EmailTriggeringEventEvaluatorlog4j.appender.EMAIL.layout=com.just.zb.email.log.EmailHTMLLayout
页: [1]
查看完整版本: log email的使用.