Log4j的html输出格式:HTMLLayout 类重写,根据自身需要输出不同列
来源:互联网 发布:linux中echo 编辑:程序博客网 时间:2024/05/16 12:06
import java.text.SimpleDateFormat; 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="??2???"; /** * A string constant used in naming the option for setting the the HTML * document title. Current value of this string constant is <b>Title</b>. */ public static final String TITLE_OPTION = "Title"; // Print no location info by default boolean locationInfo = true; public String format(LoggingEvent event) { if (sbuf.capacity() > MAX_CAPACITY) { sbuf = new StringBuffer(BUF_SIZE); } else { sbuf.setLength(0); } sbuf.append(Layout.LINE_SEP + "<tr>" + Layout.LINE_SEP); sbuf.append("<td>"); sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date())); sbuf.append("</td>" + Layout.LINE_SEP); sbuf.append("<td title=\"??±?>"); 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=\"?o?">"); sbuf.append(Transform.escapeTags(locInfo.getFileName())); sbuf.append(':'); sbuf.append(locInfo.getLineNumber()); sbuf.append("</td>" + Layout.LINE_SEP); } sbuf.append("<td title=\"??х?\">"); 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 HTML 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>??±?h>" + 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.rootLogger=DEBUG,A1,Rlog4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=sys_ztb_log.htmllog4j.appender.R.MaxFileSize=4000KBlog4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=com.dcsoft.ztb.util.FormatHTMLLayout#log4j.appender.R.layout=org.apache.log4j.HTMLLayout#log4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
运行效果:
参考资料:http://blog.163.com/chenluyu0910@126/blog/static/99042293201121051050/?suggestedreading
- Log4j的html输出格式:HTMLLayout 类重写,根据自身需要输出不同列
- 根据需要为不同的类设置不同的输出日志名称及日志格式
- Log4j根据级别输出到不同文件
- 如何在Log4j中根据输出需要控制log的显示级别
- 不同变量类型的不同输出格式
- 不同变量类型的不同输出格式
- log4j输出格式
- Log4j输出格式控制
- log4j 日志输出格式
- log4j输出格式
- log4j日志输出格式
- Log4j输出格式控制
- log4j输出格式
- org.apache.log4j.PatternLayout的输出格式
- log4j滚动输出压缩格式的文件
- log4j HTMLLayout
- Log4j按级别输出日志到不同的文件2009-09-07 13:29会按日存分割日志文件,并且根据级别输出到不同的文件
- log4j不同的日志输出到不同的文件中
- 访问android平台的通话记录CallLog
- VMware虚拟机不能发声
- Java NIO 写文件
- 04_IHE简介
- sohu单点登录
- Log4j的html输出格式:HTMLLayout 类重写,根据自身需要输出不同列
- C语言关键字学习(1)----- extern
- 实例讲解1--模式匹配
- Js_异常处理
- android中的内存泄露问题,感觉挺重要的
- 三句话影响人的一生
- .NET开源
- Visual Studio 更改模板
- JAVA容器类 - [转载]