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/04/12 18:51:08 UTC

svn commit: r528026 - /logging/sandbox/log4j/receivers/src/main/java/org/apache/log4j/net/SocketNode.java

Author: carnold
Date: Thu Apr 12 09:51:07 2007
New Revision: 528026

URL: http://svn.apache.org/viewvc?view=rev&rev=528026
Log:
Bug 42102: Change to reflective invocation of LoggingEvent.setProperty

Modified:
    logging/sandbox/log4j/receivers/src/main/java/org/apache/log4j/net/SocketNode.java

Modified: logging/sandbox/log4j/receivers/src/main/java/org/apache/log4j/net/SocketNode.java
URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/receivers/src/main/java/org/apache/log4j/net/SocketNode.java?view=diff&rev=528026&r1=528025&r2=528026
==============================================================================
--- logging/sandbox/log4j/receivers/src/main/java/org/apache/log4j/net/SocketNode.java (original)
+++ logging/sandbox/log4j/receivers/src/main/java/org/apache/log4j/net/SocketNode.java Thu Apr 12 09:51:07 2007
@@ -17,23 +17,23 @@
 
 package org.apache.log4j.net;
 
+import org.apache.log4j.Logger;
+import org.apache.log4j.plugins.Pauseable;
+import org.apache.log4j.plugins.Receiver;
+import org.apache.log4j.spi.ComponentBase;
+import org.apache.log4j.spi.LoggerRepository;
+import org.apache.log4j.spi.LoggingEvent;
+
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
+import java.lang.reflect.Method;
 import java.net.Socket;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.log4j.Logger;
-import org.apache.log4j.plugins.Pauseable;
-import org.apache.log4j.plugins.Receiver;
-import org.apache.log4j.spi.ComponentBase;
-import org.apache.log4j.spi.LoggerRepository;
-import org.apache.log4j.spi.LoggingEvent;
-
-
 // Contributors:  Moses Hohman <mm...@rainbow.uchicago.edu>
 
 /**
@@ -68,6 +68,29 @@
      */
   private List listenerList = Collections.synchronizedList(new ArrayList());
 
+    /**
+     * Method descriptor for LoggingEvent.setProperty
+     *   which does not exist in log4j 1.2.14.
+     */
+  private static final Method LOGGING_EVENT_SET_PROPERTY =
+          getLoggingEventSetProperty();
+
+    /**
+     * Get method descriptor for LoggingEvent.setProperty
+     *   which does not exist in log4j 1.2.14.
+     * @return method descriptor or null if not supported.
+     */
+  private static Method getLoggingEventSetProperty() {
+      Method m = null;
+      try {
+          m = LoggingEvent.class.getMethod("setProperty",
+                          new Class[] { String.class, String.class });
+      } catch (NoSuchMethodException e) {
+          return null;
+      }
+      return m;
+  }
+
   /**
     Constructor for socket and logger repository.
    @param s socket
@@ -127,6 +150,29 @@
   }
 
     /**
+     * Set property in event.
+     * @param event event, may not be null.
+     * @param propName property name
+     * @param propValue property value
+     * @return true if property was set
+     */
+  private static boolean setEventProperty(
+          final LoggingEvent event,
+          final String propName,
+          final String propValue) {
+      if (LOGGING_EVENT_SET_PROPERTY != null) {
+          try {
+              LOGGING_EVENT_SET_PROPERTY.invoke(event,
+                      new Object[] { propName, propValue });
+              return true;
+          } catch (Exception e) {
+              return false;
+          }
+      }
+      return false;
+  }
+
+    /**
      * Deserialize events from socket until interrupted.
      */
   public void run() {
@@ -161,7 +207,7 @@
           event = (LoggingEvent) ois.readObject();
 
           // store the known remote info in an event property
-          event.setProperty("log4j.remoteSourceInfo", remoteInfo);
+          setEventProperty(event, "log4j.remoteSourceInfo", remoteInfo);
 
           // if configured with a receiver, tell it to post the event
           if (!isPaused()) {



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