log4j自定义html输出日志
2013-12-10 23:38
417 查看
FormatHTMLLayout.java import java.text.SimpleDateFormat; import java.util.Date; import org.apache.log4j.HTMLLayout; 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 FormatHTMLLayout extends HTMLLayout { public FormatHTMLLayout() { } protected final int BUF_SIZE = 256; protected final int MAX_CAPACITY = 1024; // 设置前缀 static String TRACE_PREFIX = "<br> "; private StringBuffer sbuf = new StringBuffer(BUF_SIZE); String title = "hello"; public static final String TITLE_OPTION = "Title"; boolean locationInfo = true; public String format(LoggingEvent event) { // 如果缓冲区的容量大于最大的设置则新建一个空间 if (sbuf.capacity() > MAX_CAPACITY) { sbuf = new StringBuffer(BUF_SIZE); } else { sbuf.setLength(0); } sbuf.append("<tr>" + Layout.LINE_SEP); sbuf.append("<td>"); sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new Date())); sbuf.append("</td>" + Layout.LINE_SEP); sbuf.append("<td title=673>"); if (event.getLevel().equals(Level.FATAL)) { sbuf.append("<font color=\"#339933\">"); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append("</font>"); } else if (event.getLevel().isGreaterOrEqual(Level.WARN)) { sbuf.append("<font color=\"#993300\"><strong>"); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append("</strong></font>"); } else { sbuf.append("<font color=\"green\">"); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append("</font>"); } sbuf.append("</td>" + Layout.LINE_SEP); if (locationInfo) { LocationInfo locInfo = event.getLocationInformation(); sbuf.append("<td title=674>"); sbuf.append(Transform.escapeTags(locInfo.getFileName())); sbuf.append(':'); sbuf.append(locInfo.getLineNumber()); sbuf.append("</td>" + Layout.LINE_SEP); } sbuf.append("<td title=675>"); sbuf.append(Transform.escapeTags(event.getRenderedMessage())); sbuf.append("</td>" + Layout.LINE_SEP); sbuf.append("</tr>" + Layout.LINE_SEP); if (event.getNDC() != null) { sbuf.append("<tr><td bgcolor=\"#EEEEEE\"> " + "style=\"font-size : xx-small;\" colspan=\"6\" " + "title=\"Nested Diagnostic Context\"> "); sbuf.append("NDC:" + Transform.escapeTags(event.getNDC())); sbuf.append("</td></tr>" + Layout.LINE_SEP); } String[] s = event.getThrowableStrRep(); if (s != null) { sbuf .append("<tr><td bgcolor=\"#993300\" style=\"color:White;font-size : xx-small;\" colspan=\"4\" >"); appendThrowableAsHTML(s, sbuf); sbuf.append("</td></tr>" + Layout.LINE_SEP); } return sbuf.toString(); } private void appendThrowableAsHTML(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 headers. */ 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>" + 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: 12px;}" + 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("<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP); sbuf.append("<tr>" + Layout.LINE_SEP); sbuf.append("<th>执行时间</th>" + Layout.LINE_SEP); sbuf.append("<th>级别</th>" + Layout.LINE_SEP); if (locationInfo) { sbuf.append("<th>所在行</th>" + Layout.LINE_SEP); } sbuf.append("<th>信息</th>" + Layout.LINE_SEP); sbuf.append("</tr>" + Layout.LINE_SEP); //sbuf.append("<br></br>" + Layout.LINE_SEP); return sbuf.toString(); } }
log4j.properties
log4j.rootLogger=DEBUG,A1,R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=sys_ztb_log.html log4j.appender.R.MaxFileSize=4000KB log4j.appender.R.layout=com.test.FormatHTMLLayout #log4j.appender.R.layout=org.apache.log4j.HTMLLayout #log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPatton=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] %m%n
test.java
public class Test { private static Logger logger=Logger.getLogger(aa.class); public static void main(String[] args) { logger.debug("This is a debug method"); logger.info("This is indo method"); logger.error("This is error"); } }
显示效果
相关文章推荐
- log4j输出多个自定义日志文件,动态配置路径
- log4j输出多个自定义日志文件,动态配置路径
- 自定义Appender ,实现输出log4j日志到GUI
- java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)
- log4j输出多个自定义日志文件,动态配置路径
- log4j自定义日志等级;数据库缓冲池存储到数据库;数据库和输出到文件终端分离;发送邮件
- Log4j的进阶使用-自定义类和+自定义输出日志类型+输出文件
- log4j自定义级别并将新级别日志信息输出到指定带日期格式的log文件
- Hadoop自定义输出日志log4j
- log4j输出多个自定义日志文件,动态配置路径
- 【转】 log4j输出多个自定义日志文件
- log4j输出多个自定义日志文件,动态配置路径
- log4j输出多个自定义日志文件、动态配置多个日志文件
- [转载]log4j输出多个自定义日志文件,动态配置路径
- log4j----按时间和大小增加新日志文件/输出多个自定义日志文件
- log4j输出多个自定义日志文件
- log4j输出多个自定义日志文件,动态配置路径
- log4j分离日志输出 自定义过滤 自定义日志文件
- log4j输出多个自定义日志文件,动态配置路径
- log4j输出多个自定义日志文件