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 23:35:25 UTC

svn commit: r510695 - 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: Thu Feb 22 14:35:24 2007
New Revision: 510695

URL: http://svn.apache.org/viewvc?view=rev&rev=510695
Log:
Bug 40161: SyslogAppender is not logging header of the layout

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=510695&r1=510694&r2=510695
==============================================================================
--- 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 Thu Feb 22 14:35:24 2007
@@ -117,6 +117,11 @@
      */
   private String localHostname;
 
+    /**
+     * Set to true after the header of the layout has been sent or if it has none.
+     */
+  private boolean layoutHeaderChecked = false;
+
   public
   SyslogAppender() {
     this.initSyslogFacilityStr();
@@ -146,6 +151,9 @@
     closed = true;
     if (sqw != null) {
         try {
+            if (layoutHeaderChecked && layout != null && layout.getFooter() != null) {
+                sendLayoutMessage(layout.getFooter());
+            }
             sqw.close();
             sqw = null;
         } catch(java.io.IOException ex) {
@@ -275,6 +283,13 @@
       return;
     }
 
+    if (!layoutHeaderChecked) {
+        if (layout != null && layout.getHeader() != null) {
+            sendLayoutMessage(layout.getHeader());
+        }
+        layoutHeaderChecked = true;
+    }
+
     String hdr = getPacketHeader(event.timeStamp);
     String packet = layout.format(event);
     if(facilityPrinting || hdr.length() > 0) {
@@ -312,6 +327,10 @@
       if (header) {
         getLocalHostname();
       }
+      if (layout != null && layout.getHeader() != null) {
+          sendLayoutMessage(layout.getHeader());
+      }
+      layoutHeaderChecked = true;
   }
 
   /**
@@ -458,5 +477,26 @@
         return buf.toString();
       }
       return "";
+  }
+
+    /**
+     * Set header or footer of layout.
+     * @param msg message body, may not be null.
+     */
+  private void sendLayoutMessage(final String msg) {
+      if (sqw != null) {
+          String packet = msg;
+          String hdr = getPacketHeader(new Date().getTime());
+          if(facilityPrinting || hdr.length() > 0) {
+              StringBuffer buf = new StringBuffer(hdr);
+              if(facilityPrinting) {
+                  buf.append(facilityStr);
+              }
+              buf.append(msg);
+              packet = buf.toString();
+          }
+          sqw.setLevel(6);
+          sqw.write(packet);
+      }
   }
 }

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=510695&r1=510694&r2=510695
==============================================================================
--- 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 Thu Feb 22 14:35:24 2007
@@ -25,6 +25,7 @@
 import org.apache.log4j.Logger;
 import org.apache.log4j.PatternLayout;
 import org.apache.log4j.VectorErrorHandler;
+import org.apache.log4j.HTMLLayout;
 
 import java.util.StringTokenizer;
 import java.net.DatagramSocket;
@@ -507,6 +508,38 @@
       syslogDate = cal.getTime();
       assertTrue(syslogDate.compareTo(preDate) >= 0);
       assertTrue(syslogDate.compareTo(postDate) <= 0);
+    }
+
+
+    /**
+     * Tests that any header or footer in layout is sent.
+     * @throws Exception if exception during test.
+     */
+    public void testLayoutHeader() throws Exception {
+        DatagramSocket ds = new DatagramSocket();
+        ds.setSoTimeout(2000);
+        DatagramPacket p = new DatagramPacket(new byte[1000], 0, 1000);
+
+      SyslogAppender appender = new SyslogAppender();
+      appender.setSyslogHost("localhost:" + ds.getLocalPort());
+      appender.setName("name");
+      appender.setHeader(false);
+      HTMLLayout pl = new HTMLLayout();
+      appender.setLayout(pl);
+      appender.activateOptions();
+
+      Logger l = Logger.getRootLogger();
+      l.addAppender(appender);
+      l.info("Hello, World");
+      appender.close();
+      String[] s = new String[3];
+      for(int i = 0; i < 3; i++) {
+          ds.receive(p);
+          s[i] = new String(p.getData(), 0, p.getLength());
+      }
+      ds.close();
+      assertEquals("<14><!DOCTYPE", s[0].substring(0,13));
+      assertEquals("<14></table>", s[2].substring(0,12));
     }
 
 }



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