importjava.text.SimpleDateFormat;importorg.apache.log4j.HTMLLayout;importorg.apache.log4j.Layout;importorg.apache.log4j.Level;importorg.apache.log4j.helpers.Transform;importorg.apache.log4j.spi.LocationInfo;importorg.apache.log4j.spi.LoggingEvent;public class HtmlLogFormat extendsHTMLLayout {publicHtmlLogFormat() {
}protected final int BUF_SIZE = 256;protected final int MAX_CAPACITY = 1024;static String TRACE_PREFIX = "
";private StringBuffer sbuf = newStringBuffer(BUF_SIZE);
String title="Automation Log";/*** A string constant used in naming the option for setting the the HTML
* document title. Current value of this string constant is Title.*/
public static final String TITLE_OPTION = "Title";//Print no location info by default
boolean locationInfo = true;publicString format(LoggingEvent event) {if (sbuf.capacity() >MAX_CAPACITY) {
sbuf= newStringBuffer(BUF_SIZE);
}else{
sbuf.setLength(0);
}
sbuf.append(Layout.LINE_SEP+ "
" +Layout.LINE_SEP);sbuf.append("
");sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(newjava.util.Date()));
sbuf.append("
" +Layout.LINE_SEP);sbuf.append("
");if(event.getLevel().equals(Level.FATAL)) {sbuf.append("");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("");
}else if(event.getLevel().isGreaterOrEqual(Level.WARN)) {
sbuf.append("");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("");
}else{
sbuf.append("");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("");
}
sbuf.append("
" +Layout.LINE_SEP);if(locationInfo) {LocationInfo locInfo=event.getLocationInformation();
sbuf.append("
");sbuf.append(Transform.escapeTags(locInfo.getFileName()));
sbuf.append(':');
sbuf.append(locInfo.getLineNumber());
sbuf.append("
" +Layout.LINE_SEP);}
sbuf.append("
");sbuf.append(Transform.escapeTags(event.getRenderedMessage()));
sbuf.append("
" +Layout.LINE_SEP);sbuf.append("
" +Layout.LINE_SEP);if (event.getNDC() != null) {sbuf.append("
");sbuf.append("NDC: " +Transform.escapeTags(event.getNDC()));
sbuf.append("
" +Layout.LINE_SEP);}
String[] s=event.getThrowableStrRep();if (s != null) {
sbuf.append("
");appendThrowableAsHTML(s, sbuf);
sbuf.append("
" +Layout.LINE_SEP);}returnsbuf.toString();
}private voidappendThrowableAsHTML(String[] s,StringBuffer sbuf){if (s != null) {int len =s.length;if (len == 0)return;
sbuf.append(Transform.escapeTags(s[0]));
sbuf.append(Layout.LINE_SEP);for (int i = 1; i < len; i++) {
sbuf.append(TRACE_PREFIX);
sbuf.append(Transform.escapeTags(s[i]));
sbuf.append(Layout.LINE_SEP);
}
}
}/*** Returns appropriate HTML headers.*/
publicString getHeader() {
StringBuffer sbuf= newStringBuffer();
sbuf.append("" +Layout.LINE_SEP);
sbuf.append("" +Layout.LINE_SEP);
sbuf.append("
" +Layout.LINE_SEP);sbuf.append("" +Layout.LINE_SEP);
sbuf.append("
" + title + "" +Layout.LINE_SEP);sbuf.append("
sbuf.append("" +Layout.LINE_SEP);
sbuf.append("" +Layout.LINE_SEP);
sbuf.append("" +Layout.LINE_SEP);
sbuf.append("
" +Layout.LINE_SEP);sbuf.append("
sbuf.append("
" +Layout.LINE_SEP);sbuf.append("
Time" +Layout.LINE_SEP);sbuf.append("
Level" +Layout.LINE_SEP);if(locationInfo) {sbuf.append("
Source" +Layout.LINE_SEP);}
sbuf.append("
Message" +Layout.LINE_SEP);sbuf.append("
" +Layout.LINE_SEP);sbuf.append("
" +Layout.LINE_SEP);returnsbuf.toString();
}
}