You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2007/02/22 00:37:33 UTC

svn commit: r510307 - in /logging/log4j/branches/v1_2-branch: src/java/org/apache/log4j/net/SyslogAppender.java tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java

Author: carnold
Date: Wed Feb 21 15:37:32 2007
New Revision: 510307

URL: http://svn.apache.org/viewvc?view=rev&rev=510307
Log:
Bug 40502: SyslogAppender assumes all stack trace lines start with tab

Modified:
    logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java
    logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java

Modified: logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java?view=diff&rev=510307&r1=510306&r2=510307
==============================================================================
--- logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java (original)
+++ logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java Wed Feb 21 15:37:32 2007
@@ -261,12 +261,12 @@
     if (layout.ignoresThrowable()) {
       String[] s = event.getThrowableStrRep();
       if (s != null) {
-        int len = s.length;
-        if(len > 0) {
-          sqw.write(s[0]);
-          for(int i = 1; i < len; i++) {
-            sqw.write(TAB+s[i].substring(1));
-          }
+        for(int i = 0; i < s.length; i++) {
+            if (s[i].startsWith("\t")) {
+               sqw.write(TAB+s[i].substring(1));
+            } else {
+               sqw.write(s[i]);
+            }
         }
       }
     }

Modified: logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java?view=diff&rev=510307&r1=510306&r2=510307
==============================================================================
--- logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java (original)
+++ logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java Wed Feb 21 15:37:32 2007
@@ -25,14 +25,10 @@
 import org.apache.log4j.Logger;
 import org.apache.log4j.PatternLayout;
 import org.apache.log4j.VectorErrorHandler;
-import org.apache.log4j.helpers.SyslogWriter;
 
 import java.util.StringTokenizer;
-import java.io.IOException;
 import java.net.DatagramSocket;
 import java.net.DatagramPacket;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 
 
 /**
@@ -391,8 +387,9 @@
       appender.setSyslogHost("127.0.0.1:1514");
   }
 
-
-    public void testActualLogging() throws Exception {
+    private static String[] log(final String msg,
+                                final Exception ex,
+                                final int packets) throws Exception {
         DatagramSocket ds = new DatagramSocket();
         ds.setSoTimeout(2000);
         DatagramPacket p = new DatagramPacket(new byte[1000], 0, 1000);
@@ -406,14 +403,63 @@
 
       Logger l = Logger.getRootLogger();
       l.addAppender(appender);
-      l.info("greetings");
+      if (ex == null) {
+        l.info(msg);
+      } else {
+        l.error(msg, ex);
+      }
       appender.close();
-      ds.receive(p);
+      String[] retval = new String[packets];
+      for(int i = 0; i < packets; i++) {
+          ds.receive(p);
+          retval[i] = new String(p.getData(), 0, p.getLength());
+      }
       ds.close();
-      String s = new String(p.getData(), 0, p.getLength());
+      return retval;
+    }
+
+    public void testActualLogging() throws Exception {
+      String s = log("greetings", null, 1)[0];
       StringTokenizer st = new StringTokenizer(s, "<>() ");
       assertEquals("14", st.nextToken());
       assertEquals("greetings", st.nextToken());
+    }
+
+    /**
+     * Exception with printStackTrace that breaks earlier SyslogAppender.
+     */
+    private static class MishandledException extends Exception {
+        /*
+         *   Create new instance.
+         */
+        public MishandledException() {
+        }
+
+        /**
+         * Print stack trace.
+         * @param w print writer, may not be null.
+         */
+        public void printStackTrace(final java.io.PrintWriter w) {
+             w.println("Mishandled stack trace follows:");
+             w.println("");
+             w.println("No tab here");
+             w.println("\ttab here");
+        }
+    }
+
+    /**
+     * Tests fix for bug 40502.
+     * @throws Exception on IOException.
+     */
+    public void testBadTabbing() throws Exception {
+        String[] s = log("greetings", new MishandledException(), 5);
+        StringTokenizer st = new StringTokenizer(s[0], "<>() ");
+        assertEquals("11", st.nextToken());
+        assertEquals("greetings", st.nextToken());
+        assertEquals("<11>Mishandled stack trace follows:", s[1]);
+        assertEquals("<11>", s[2]);
+        assertEquals("<11>No tab here", s[3]);
+        assertEquals("<11>" + SyslogAppender.TAB + "tab here", s[4]);
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org