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 ps...@apache.org on 2008/03/07 06:44:34 UTC

svn commit: r634545 - in /logging/log4j/trunk/src: changes/changes.xml main/java/org/apache/log4j/net/SocketHubAppender.java

Author: psmith
Date: Thu Mar  6 21:44:32 2008
New Revision: 634545

URL: http://svn.apache.org/viewvc?rev=634545&view=rev
Log:
Bug 44551 SocketHubAppender in the 1.2.16 does not support a scroll back buffer or application property.

This returns a feature from the old 1.3 codebase (yay!)

Applied patch generously  provided by Jason Tholstrup.

Modified:
    logging/log4j/trunk/src/changes/changes.xml
    logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=634545&r1=634544&r2=634545&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Thu Mar  6 21:44:32 2008
@@ -36,6 +36,7 @@
        <action action="fix" issue="43387">Minor documentation changes.</action>
        <action action="fix" issue="43304">Make javamail, jmx, jms dependencies optional in pom.xml.</action>
        <action action="add" issue="43874">SocketHubAppender should expose actual port in use to extending classes.</action>
+       <action action="add" issue="44551">SocketHubAppender in the 1.2.16 does not support a scroll back buffer or application property</action>
     </release>
   
     <release version="1.2.15" date="2007-08-24" description="SyslogAppender enhancements, NTEventLogAppender and Maven build.">

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java?rev=634545&r1=634544&r2=634545&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java Thu Mar  6 21:44:32 2008
@@ -26,6 +26,7 @@
 import java.io.InterruptedIOException;
 import java.net.InetAddress;
 
+import org.apache.log4j.helpers.CyclicBuffer;
 import org.apache.log4j.helpers.LogLog;
 import org.apache.log4j.spi.LoggingEvent;
 import org.apache.log4j.AppenderSkeleton;
@@ -114,6 +115,8 @@
   private Vector oosList = new Vector();
   private ServerMonitor serverMonitor = null;
   private boolean locationInfo = false;
+  private CyclicBuffer buffer = null;
+  private String application;
   
   public SocketHubAppender() { }
 
@@ -179,14 +182,23 @@
     Append an event to all of current connections. */
   public
   void append(LoggingEvent event) {
-	// if no event or no open connections, exit now
-    if(event == null || oosList.size() == 0)
-      return;
+    if (event != null) {
+      // set up location info if requested
+      if (locationInfo) {
+        event.getLocationInformation();
+      }
+      if (application != null) {
+          event.setProperty("application", application);
+        } 
+      if (buffer != null) {
+        buffer.add(event);
+      }
+    }
 
-    // set up location info if requested
-    if (locationInfo) {
-    	event.getLocationInformation();	
-    } 
+    // if no event or no open connections, exit now
+    if ((event == null) || (oosList.size() == 0)) {
+      return;
+    }
 
 	// loop through the current set of open connections, appending the event to each
     for (int streamCount = 0; streamCount < oosList.size(); streamCount++) {    	
@@ -238,6 +250,23 @@
   public
   void setPort(int _port) {
     port = _port;
+	}
+
+  /**
+   * The <b>App</b> option takes a string value which should be the name of the application getting logged. If property was already set (via system
+   * property), don't set here.
+   */
+  public 
+  void setApplication(String lapp) {
+    this.application = lapp;
+  }
+
+  /**
+   * Returns value of the <b>Application</b> option.
+   */
+  public 
+  String getApplication() {
+    return application;
   }
   
   /**
@@ -246,6 +275,27 @@
   int getPort() {
     return port;
   }
+
+  /**
+   * The <b>BufferSize</b> option takes a positive integer representing the number of events this appender will buffer and send to newly connected
+   * clients.
+   */
+  public 
+  void setBufferSize(int _bufferSize) {
+    buffer = new CyclicBuffer(_bufferSize);
+  }
+
+  /**
+   * Returns value of the <b>bufferSize</b> option.
+   */
+  public 
+  int getBufferSize() {
+    if (buffer == null) {
+      return 0;
+    } else {
+      return buffer.getMaxSize();
+    }
+  }
   
   /**
      The <b>LocationInfo</b> option takes a boolean value. If true,
@@ -325,6 +375,17 @@
       }
     }
     
+    private 
+    void sendCachedEvents(ObjectOutputStream stream) throws IOException {
+      if (buffer != null) {
+        for (int i = 0; i < buffer.length(); i++) {
+          stream.writeObject(buffer.get(i));
+        }
+        stream.flush();
+        stream.reset();
+      }
+    }
+
     /**
       Method that runs, monitoring the ServerSocket and adding connections as
       they connect to the socket. */
@@ -375,11 +436,13 @@
 	        	
               // create an ObjectOutputStream
               ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
+              if (buffer != null && buffer.length() > 0) {
+                sendCachedEvents(oos);
+              }
 	            
               // add it to the oosList.  OK since Vector is synchronized.
               oosList.addElement(oos);
-            }
-            catch (IOException e) {
+            } catch (IOException e) {
               LogLog.error("exception creating output stream on socket.", e);
             }
           }



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