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 2005/11/25 08:03:47 UTC

svn commit: r348903 - /logging/chainsaw/trunk/zeroconf/org/apache/log4j/net/ZeroConfSocketHubAppender.java

Author: psmith
Date: Thu Nov 24 23:03:19 2005
New Revision: 348903

URL: http://svn.apache.org/viewcvs?rev=348903&view=rev
Log:
This change makes this class binary compatible with log4j 1.2.x.

Some would call this hacky.  I would too.

Modified:
    logging/chainsaw/trunk/zeroconf/org/apache/log4j/net/ZeroConfSocketHubAppender.java

Modified: logging/chainsaw/trunk/zeroconf/org/apache/log4j/net/ZeroConfSocketHubAppender.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/zeroconf/org/apache/log4j/net/ZeroConfSocketHubAppender.java?rev=348903&r1=348902&r2=348903&view=diff
==============================================================================
--- logging/chainsaw/trunk/zeroconf/org/apache/log4j/net/ZeroConfSocketHubAppender.java (original)
+++ logging/chainsaw/trunk/zeroconf/org/apache/log4j/net/ZeroConfSocketHubAppender.java Thu Nov 24 23:03:19 2005
@@ -1,10 +1,13 @@
 package org.apache.log4j.net;
 
 import java.io.IOException;
+import java.lang.reflect.Method;
 
 import javax.jmdns.JmDNS;
 import javax.jmdns.ServiceInfo;
 
+import org.apache.log4j.Level;
+
 
 /**
  * A sub-class of SocketHubAppender that broadcasts its configuration via Zeroconf.
@@ -22,18 +25,51 @@
     
     private String zeroConfDeviceName = "SocketHubAppender";
     
+    private Object logger;
+    private Method logInfoMethod;
+    private Method logErrorMethod;
+    
+    public ZeroConfSocketHubAppender() {
+        try {
+            Method getLoggerMethod = this.getClass().getMethod("getLogger", new Class[0]);
+            logger = getLoggerMethod.invoke(this, new Object[0]);
+            logInfoMethod = logger.getClass().getMethod("info", new Class[] {Object.class});
+            logErrorMethod = logger.getClass().getMethod("error", new Class[] {Object.class});
+        }catch(Exception e) {
+            // we're not in log4j1.3 land
+        }
+    }
     public void activateOptions() {
         super.activateOptions();
         
         try {
             JmDNS jmDNS = Zeroconf4log4j.getInstance();
-            ServiceInfo info = new ServiceInfo(zeroConfZone, zeroConfDeviceName, getPort(), "SocketHubAppender on port " + getPort() );
-            getLogger().info("Registering this SocketHubAppender as :" + info);
+            ServiceInfo info = buildServiceInfo();
+            logWithlog4j12Compatibility(Level.INFO,"Registering this SocketHubAppender as :" + info);
             jmDNS.registerService(info);
         } catch (IOException e) {
-            getLogger().error("Failed to instantiate JmDNS to broadcast via ZeroConf, will now operate in simple SocketHubAppender mode");
+            logWithlog4j12Compatibility(Level.ERROR,"Failed to instantiate JmDNS to broadcast via ZeroConf, will now operate in simple SocketHubAppender mode");
+        }
+    }
+    private ServiceInfo buildServiceInfo() {
+        return new ServiceInfo(zeroConfZone, zeroConfDeviceName, getPort(), "SocketHubAppender on port " + getPort() );
+    }
+    
+    private void logWithlog4j12Compatibility(Level level, String message) {
+        if(logger!=null && logInfoMethod!=null & logErrorMethod!=null) {
+            try {
+                switch (level.toInt()) {
+                case Level.INFO_INT:
+                    logInfoMethod.invoke(logger, new Object[] { message });
+                    break;
+                case Level.ERROR_INT:
+                    logInfoMethod.invoke(logger, new Object[] { message });
+                    break;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         }
-        
     }
 
     /**
@@ -84,4 +120,17 @@
 //        TODO work out a sane checking mechanism that verifies the value is a correct ZeroConf zone
         this.zeroConfZone = zeroConfZone;
     }
+    public synchronized void close() {
+        super.close();
+        try {
+            JmDNS jmDNS = Zeroconf4log4j.getInstance();
+            ServiceInfo info = buildServiceInfo();
+            logWithlog4j12Compatibility(Level.INFO,"Deregistering this SocketHubAppender (" + info + ")");
+            jmDNS.unregisterService(info);
+        } catch (Exception e) {
+            logWithlog4j12Compatibility(Level.ERROR,"Failed to instantiate JmDNS to broadcast via ZeroConf, will now operate in simple SocketHubAppender mode");
+        }
+    }
+    
+    
 }



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