svn commit: r560 - in logback/trunk/logback-classic/src: main/java/ch/qos/logback/classic/html test/java/ch/qos/logback/classic/html

Author: seb Date: Tue Sep 12 11:48:40 2006 New Revision: 560 Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java Log: - added table break each 10'000 logs - updated html code to xhtml - improved test Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java Tue Sep 12 11:48:40 2006 @@ -13,9 +13,7 @@ import ch.qos.logback.classic.ClassicLayout; import ch.qos.logback.classic.PatternLayout; import ch.qos.logback.classic.helpers.Transform; -import ch.qos.logback.classic.pattern.NopThrowableInformationConverter; import ch.qos.logback.classic.pattern.ThrowableHandlingConverter; -import ch.qos.logback.classic.pattern.ThrowableInformationConverter; import ch.qos.logback.classic.spi.LoggingEvent; import ch.qos.logback.classic.spi.ThrowableInformation; import ch.qos.logback.core.LayoutBase; @@ -53,7 +51,6 @@ //private String timezone; private String title = "Logback Log Messages"; - private boolean locationInfo; private boolean internalCSS = false; private String url2ExternalCSS = "http://logging.apache.org/log4j/docs/css/eventTable-1.0.css"; @@ -63,6 +60,8 @@ // counter keeping track of the rows output private long counter = 0; + //max number of rows before we close the table and create a new one + private static final int ROW_LIMIT = 10000; /** * Constructs a PatternLayout using the DEFAULT_LAYOUT_PATTERN. @@ -209,8 +208,8 @@ */ public String getHeader() { StringBuffer sbuf = new StringBuffer(); - sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\""); - sbuf.append(" \"http://www.w3.org/TR/html4/loose.dtd\">"); + sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""); + sbuf.append(" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); sbuf.append(LINE_SEP); sbuf.append("<html>"); sbuf.append(LINE_SEP); @@ -225,7 +224,7 @@ } else { sbuf.append("<LINK REL=StyleSheet HREF=\""); sbuf.append(url2ExternalCSS); - sbuf.append("\" TITLE=\"Basic\">"); + sbuf.append("\" TITLE=\"Basic\" />"); } sbuf.append(LINE_SEP); sbuf.append("</head>"); @@ -233,23 +232,28 @@ sbuf.append("<body>"); sbuf.append(LINE_SEP); - sbuf.append("<hr size=\"1\" noshade>"); + sbuf.append("<hr size=\"1\" noshade=\"true\" />"); sbuf.append(LINE_SEP); sbuf.append("Log session start time "); sbuf.append(new java.util.Date()); - sbuf.append("<br>"); + sbuf.append("<br />"); sbuf.append(LINE_SEP); - sbuf.append("<br>"); + sbuf.append("<br />"); sbuf.append(LINE_SEP); sbuf.append("<table cellspacing=\"0\">"); sbuf.append(LINE_SEP); - - sbuf.append("<tr class=\"header\">"); - sbuf.append(LINE_SEP); + createTableHeader(sbuf); + + return sbuf.toString(); + } + + private void createTableHeader(StringBuffer sbuf) { Converter c = head; String name; + sbuf.append("<tr class=\"header\">"); + sbuf.append(LINE_SEP); while (c != null) { name = computeConverterName(c); if (name == null) { @@ -259,7 +263,6 @@ sbuf.append("<td class=\""); sbuf.append(computeConverterName(c)); sbuf.append("\">"); - sbuf.append("<td>"); sbuf.append(computeConverterName(c)); sbuf.append("</td>"); sbuf.append(LINE_SEP); @@ -267,9 +270,9 @@ } sbuf.append("</tr>"); sbuf.append(LINE_SEP); - - return sbuf.toString(); } + + /** * Returns the appropriate HTML footers. @@ -297,7 +300,9 @@ } public String doLayout(LoggingEvent event) { - + StringBuffer buf = new StringBuffer(); + handleTableClosing(buf); + boolean odd = true; if (((counter++) & 1) == 0) { odd = false; @@ -305,7 +310,7 @@ String level = event.getLevel().toString().toLowerCase(); - StringBuffer buf = new StringBuffer(); + buf.append(LINE_SEP); buf.append("<tr class=\""); buf.append(level); @@ -355,6 +360,18 @@ return buf.toString(); } + private void handleTableClosing(StringBuffer sbuf) { + if (this.counter >= ROW_LIMIT) { + counter = 0; + sbuf.append("</table>"); + sbuf.append(LINE_SEP); + sbuf.append("<br />"); + sbuf.append("<table cellspacing=\"0\">"); + sbuf.append(LINE_SEP); + createTableHeader(sbuf); + } + } + private void appendEventToBuffer(StringBuffer buf, Converter c, LoggingEvent event) { buf.append("<td class=\""); buf.append(computeConverterName(c)); Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java Tue Sep 12 11:48:40 2006 @@ -1,5 +1,7 @@ package ch.qos.logback.classic.html; +import java.util.List; + import junit.framework.TestCase; import org.dom4j.Document; @@ -30,6 +32,7 @@ layout = new HTMLLayout(); layout.setContext(lc); layout.setPattern("%level %thread %msg"); + layout.setInternalCSS(true); layout.start(); appender.setLayout(layout); logger = lc.getLogger(LoggerContext.ROOT_NAME); @@ -44,14 +47,22 @@ layout = null; } + @SuppressWarnings("unchecked") public void testHeader() throws Exception { String header = layout.getHeader(); - // System.out.println(header); - assertTrue(header.indexOf("Level") == 422); - assertTrue(header.indexOf("Literal") == 456); - assertTrue(header.indexOf("Thread") == 494); - assertTrue(header.lastIndexOf("Literal") == 543); - assertTrue(header.indexOf("Message") == 139); + //System.out.println(header); + + Document doc = parseOutput(header + "</table></body></html>"); + Element rootElement = doc.getRootElement(); + Element bodyElement = rootElement.element("body"); + Element tableElement = bodyElement.element("table"); + Element trElement = tableElement.element("tr"); + List<Element> elementList = trElement.elements(); + assertEquals("Level", elementList.get(0).getText()); + assertEquals("Literal", elementList.get(1).getText()); + assertEquals("Thread", elementList.get(2).getText()); + assertEquals("Literal", elementList.get(3).getText()); + assertEquals("Message", elementList.get(4).getText()); } public void testAppendThrowable() throws Exception { @@ -93,6 +104,7 @@ // System.out.println(result); } + @SuppressWarnings("unchecked") public void testDoLayoutWithException() throws Exception { layout.setPattern("%level %thread %msg %ex"); LoggingEvent le = createLoggingEvent(); @@ -100,44 +112,29 @@ "test Exception"))); String result = layout.doLayout(le); - //System.out.println(result); - - Document doc = parseOutput(result); - Element trElement = doc.getRootElement(); - assertEquals(6, trElement.elements().size()); - { - Element tdElement = (Element) trElement.elements().get(0); - assertEquals("DEBUG", tdElement.getText()); - } - { - Element tdElement = (Element) trElement.elements().get(1); - assertEquals(" ", tdElement.getText()); - } - { - Element tdElement = (Element) trElement.elements().get(2); - assertEquals("main", tdElement.getText()); - } - { - Element tdElement = (Element) trElement.elements().get(3); - assertEquals(" ", tdElement.getText()); - } - { - Element tdElement = (Element) trElement.elements().get(4); - assertEquals("test message", tdElement.getText()); - } -// { -// Element trElement2 = (Element) trElement.elements().get(5); -// Element tdElement = (Element) trElement2.elements().get(0); -// assertTrue(tdElement.getText().contains( -// "java.lang.Exception: test Exception")); -// } + String stringToParse = layout.getHeader(); + stringToParse += result; + stringToParse += "</table></body></html>"; + + System.out.println(stringToParse); + + Document doc = parseOutput(stringToParse); + Element rootElement = doc.getRootElement(); + Element bodyElement = rootElement.element("body"); + Element tableElement = bodyElement.element("table"); + List<Element> trElementList = tableElement.elements(); + Element exceptionRowElement = trElementList.get(2); + Element exceptionElement = exceptionRowElement.element("td"); + + assertEquals(3, tableElement.elements().size()); + assertTrue(exceptionElement.getText().contains("java.lang.Exception: test Exception")); } - public void testLog() { - for (int i = 0; i < 2000; i++) { - logger.debug("test message"); - } - } +// public void testLog() { +// for (int i = 1; i <= 100000; i++) { +// logger.debug("test message" + i); +// } +// } private LoggingEvent createLoggingEvent() { LoggingEvent le = new LoggingEvent(this.getClass().getName(), logger,
participants (1)
-
noreply.seb@qos.ch