
Author: seb Date: Thu Sep 28 12:28:07 2006 New Revision: 609 Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyBasicTest.java logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyTestSetup.java Log: - modified RequestLogImpl javadoc - AccessEvent now remembers if the postContent has already been accessed - updated tests Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java ============================================================================== --- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java (original) +++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java Thu Sep 28 12:28:07 2006 @@ -39,6 +39,17 @@ * Layouts are declared the exact same way. However, loggers elements are not * allowed. * <p> + * It is possible to put the logback configuration file anywhere, as long as it's path is + * specified. Here is another example, with a path to the logback.xml file. + * <pre> + * <Ref id="requestLog"> + * <Set name="requestLog"> + * <New id="requestLogImpl" class="ch.qos.logback.access.jetty.RequestLogImpl"></New> + * <Set name="fileName">path/to/logback.xml</Set> + * </Set> + * </Ref> + * </pre> + * <p> * Here is a sample logback.xml file that can be used right away: * <pre> * <configuration> @@ -51,6 +62,9 @@ * <appender-ref ref="STDOUT" /> * </configuration> * </pre> + * + * + * <p> * A special, module-specific implementation of PatternLayout was implemented to allow * http-specific patterns to be used. The {@link ch.qos.logback.access.PatternLayout} provides * a way to format the logging output that is just as easy and flexible as the usual Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java ============================================================================== --- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java (original) +++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessEvent.java Thu Sep 28 12:28:07 2006 @@ -11,6 +11,15 @@ import ch.qos.logback.access.pattern.AccessConverter; +/** + * The Access module's internal representation of logging events. When the + * RequestLogImpl instance is called to log then a <code>AccessEvent</code> + * instance is created. This instance is passed around to the different logback + * components. + * + * @author Ceki Gülcü + * @author Sébastien Pennec + */ public class AccessEvent implements Serializable { private static final long serialVersionUID = -3118194368414470960L; @@ -29,6 +38,7 @@ String protocol; String method; String serverName; + String postContent; Map<String, Object> requestHeaderMap; @@ -280,17 +290,20 @@ } public String getPostContent() { - String content = null; + if (postContent != null) { + return postContent; + } + try { - content = Util.readToString(httpRequest.getInputStream()); + postContent = Util.readToString(httpRequest.getInputStream()); } catch (Exception ex) { // do nothing } - if (content != null && content.length() > 0) { - return content; - } else { - return NA; + if (postContent == null || postContent.length() == 0) { + postContent = NA; } + + return postContent; } public int getLocalPort() { Modified: logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyBasicTest.java ============================================================================== --- logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyBasicTest.java (original) +++ logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyBasicTest.java Thu Sep 28 12:28:07 2006 @@ -1,6 +1,5 @@ package ch.qos.logback.access.jetty; - import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; @@ -15,57 +14,81 @@ import ch.qos.logback.core.appender.ListAppender; public class JettyBasicTest extends TestCase { - + static RequestLogImpl requestLogImpl; - + public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(JettyBasicTest.class); requestLogImpl = new RequestLogImpl(); return new JettyTestSetup(suite, requestLogImpl); } - -// public void testGetRequest() throws Exception { -// URL url = new URL("http://localhost:8080/"); -// HttpURLConnection connection = (HttpURLConnection)url.openConnection(); -// connection.setDoInput(true); -// -// String result = Util.readToString(connection.getInputStream()); -// -// assertEquals("hello world", result); -// -// ListAppender appender = (ListAppender)requestLogImpl.getAppender("list"); -// appender.list.clear(); -// } - + + public void testGetRequest() throws Exception { + URL url = new URL("http://localhost:8080/"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoInput(true); + + String result = Util.readToString(connection.getInputStream()); + + assertEquals("hello world", result); + + ListAppender appender = (ListAppender) requestLogImpl.getAppender("list"); + appender.list.clear(); + } + + public void testEventGoesToAppenders() throws Exception { + URL url = new URL("http://localhost:8080/"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoInput(true); + + String result = Util.readToString(connection.getInputStream()); + + assertEquals("hello world", result); + + ListAppender appender = (ListAppender) requestLogImpl.getAppender("list"); + AccessEvent event = (AccessEvent) appender.list.get(0); + assertEquals("127.0.0.1", event.getRemoteHost()); + assertEquals("localhost", event.getServerName()); + appender.list.clear(); + } + public void testPostContentConverter() throws Exception { System.out.println("into test"); URL url = new URL("http://localhost:8080/"); - HttpURLConnection connection = (HttpURLConnection)url.openConnection(); - ((HttpURLConnection)connection).setRequestMethod("POST"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + ((HttpURLConnection) connection).setRequestMethod("POST"); + connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestProperty("Content-Type", "text/plain"); - + // connection.setRequestProperty("Content-Type", + // "application/x-www-form-urlencoded"); + String msg = "test message"; - PrintWriter output = new PrintWriter(new OutputStreamWriter(connection.getOutputStream())); + PrintWriter output = new PrintWriter(new OutputStreamWriter(connection + .getOutputStream())); output.print(msg); output.flush(); output.close(); - + // System.out.println("length: " + connection.getContentLength()); + + // Reading the response String result = Util.readToString(connection.getInputStream()); + assertEquals("hello world", result); + + // StatusPrinter.print(requestLogImpl.getStatusManager()); + + ListAppender listAppender = (ListAppender) requestLogImpl + .getAppender("list"); + AccessEvent event = (AccessEvent) listAppender.list.get(0); + assertEquals(msg, event.getPostContent()); - ListAppender appender = (ListAppender)requestLogImpl.getAppender("list"); - //assertEquals(1, appender.list.size()); - Iterator it = appender.list.iterator(); - int i = 0; - while(it.hasNext()) { - AccessEvent event = (AccessEvent)it.next(); - System.out.println(i++ + ": " + event.getPostContent()); + Iterator it = listAppender.list.iterator(); + while (it.hasNext()) { + AccessEvent event2 = (AccessEvent) it.next(); + System.out.println("Event PostContent: " + event2.getPostContent()); } - //System.out.println("0: " + event.getPostContent()); - } - } Modified: logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyTestSetup.java ============================================================================== --- logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyTestSetup.java (original) +++ logback/trunk/logback-access/src/test/java/ch/qos/logback/access/jetty/JettyTestSetup.java Thu Sep 28 12:28:07 2006 @@ -27,7 +27,6 @@ public class JettyTestSetup extends TestSetup { - ListAppender appender; RequestLogImpl requestLogImpl; public JettyTestSetup(Test suite, RequestLogImpl impl) { @@ -68,32 +67,30 @@ System.out.println("into tearDown"); super.tearDown(); server.stop(); -// Thread.sleep(1000); -// server = null; -// appender = null; -// requestLogImpl = null; + Thread.sleep(1000); + server = null; + requestLogImpl = null; } private void buildContext() { - appender = new ListAppender(); + ListAppender appender = new ListAppender(); appender.setContext(requestLogImpl); appender.setName("list"); appender.start(); -// ConsoleAppender console = new ConsoleAppender(); -// console.setContext(requestLogImpl); -// console.setName("console"); -// PatternLayout layout = new PatternLayout(); -// layout.setContext(requestLogImpl); -// layout -// .setPattern("%date %server %remoteIP %clientHost %user %requestURL %post"); -// console.setLayout(layout); -// layout.start(); -// console.start(); + ConsoleAppender console = new ConsoleAppender(); + console.setContext(requestLogImpl); + console.setName("console"); + PatternLayout layout = new PatternLayout(); + layout.setContext(requestLogImpl); + layout.setPattern("%date %server %clientHost %post"); + console.setLayout(layout); + layout.start(); + console.start(); - //requestLogImpl.addAppender(console); requestLogImpl.addAppender(appender); + requestLogImpl.addAppender(console); } } @@ -103,6 +100,9 @@ HttpServletResponse response, int dispatch) throws IOException, ServletException { + // String requestContent = Util.readToString(request.getInputStream()); + // System.out.println("request content: " + requestContent); + OutputStream out = response.getOutputStream(); ByteArrayISO8859Writer writer = new ByteArrayISO8859Writer(); writer.write("hello world");