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