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/21 23:45:34 UTC

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

Author: carnold
Date: Wed Feb 21 14:45:33 2007
New Revision: 510279

URL: http://svn.apache.org/viewvc?view=rev&rev=510279
Log:
Bug 37282: SyslogAppender leaks descriptors

Modified:
    logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java
    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/helpers/SyslogWriter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java?view=diff&rev=510279&r1=510278&r2=510279
==============================================================================
--- logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java (original)
+++ logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java Wed Feb 21 14:45:33 2007
@@ -101,7 +101,7 @@
       this.ds = new DatagramSocket();
     }
     catch (SocketException e) {
-      e.printStackTrace(); 
+      e.printStackTrace();
       LogLog.error("Could not instantiate DatagramSocket to " + host +
 			 ". All logging will FAIL.", e);
     }
@@ -128,6 +128,9 @@
   public
   void flush() {}
 
-  public
-  void close() {}
+  public void close() {
+      if (ds != null) {
+          ds.close();
+      }
+  }
 }

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=510279&r1=510278&r2=510279
==============================================================================
--- 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 14:45:33 2007
@@ -121,9 +121,14 @@
   public
   void close() {
     closed = true;
-    // A SyslogWriter is UDP based and needs no opening. Hence, it
-    // can't be closed. We just unset the variables here.
-    sqw = null;
+    if (sqw != null) {
+        try {
+            sqw.close();
+            sqw = null;
+        } catch(java.io.IOException ex) {
+            sqw = null;
+        }
+    }
   }
 
   private

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=510279&r1=510278&r2=510279
==============================================================================
--- 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 14:45:33 2007
@@ -25,6 +25,14 @@
 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;
 
 
 /**
@@ -342,7 +350,7 @@
 
   /**
     *  Tests SyslogAppender with IPv6 address.
-    */  
+    */
   public void testIPv6() {
       SyslogAppender appender = new SyslogAppender();
       appender.setSyslogHost("::1");
@@ -350,7 +358,7 @@
 
   /**
     *  Tests SyslogAppender with IPv6 address enclosed in square brackets.
-    */  
+    */
   public void testIPv6InBrackets() {
       SyslogAppender appender = new SyslogAppender();
       appender.setSyslogHost("[::1]");
@@ -359,7 +367,7 @@
   /**
     *  Tests SyslogAppender with IPv6 address enclosed in square brackets
     *     followed by port specification.
-    */  
+    */
   public void testIPv6AndPort() {
       SyslogAppender appender = new SyslogAppender();
       appender.setSyslogHost("[::1]:1514");
@@ -368,7 +376,7 @@
   /**
     *  Tests SyslogAppender with host name enclosed in square brackets
     *     followed by port specification.
-    */  
+    */
   public void testHostNameAndPort() {
       SyslogAppender appender = new SyslogAppender();
       appender.setSyslogHost("localhost:1514");
@@ -377,9 +385,35 @@
 
   /**
     *  Tests SyslogAppender with IPv4 address followed by port specification.
-    */  
+    */
   public void testIPv4AndPort() {
       SyslogAppender appender = new SyslogAppender();
       appender.setSyslogHost("127.0.0.1:1514");
   }
+
+
+    public void testActualLogging() 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");
+      PatternLayout pl = new PatternLayout("%m");
+      appender.setLayout(pl);
+      appender.activateOptions();
+
+      Logger l = Logger.getRootLogger();
+      l.addAppender(appender);
+      l.info("greetings");
+      appender.close();
+      ds.receive(p);
+      ds.close();
+      String s = new String(p.getData(), 0, p.getLength());
+      StringTokenizer st = new StringTokenizer(s, "<>() ");
+      assertEquals("14", st.nextToken());
+      assertEquals("greetings", st.nextToken());
+    }
+
 }



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