Committing in-progress work to support Log4j2 fileappender configurations advertised via Multicast DNS
git-svn-id: https://svn.apache.org/repos/asf/logging/chainsaw/trunk@1451138 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 182eab5..29ea0ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -389,10 +389,10 @@
<version>1.2.16</version>
</dependency>
<dependency>
- <groupId>jmdns</groupId>
+ <groupId>javax.jmdns</groupId>
<artifactId>jmdns</artifactId>
- <version>1.0</version>
- </dependency>
+ <version>3.4.1</version>
+ </dependency>
<dependency>
<groupId>xstream</groupId>
<artifactId>xstream</artifactId>
diff --git a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
index 369e9d8..9fedd69 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -52,11 +52,13 @@
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.LogFilePatternLayoutBuilder;
import org.apache.log4j.chainsaw.SmallButton;
import org.apache.log4j.chainsaw.help.HelpManager;
import org.apache.log4j.chainsaw.icons.ChainsawIcons;
import org.apache.log4j.chainsaw.plugins.GUIPluginSkeleton;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.chainsaw.vfs.VFSLogFilePatternReceiver;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.net.MulticastReceiver;
import org.apache.log4j.net.SocketHubReceiver;
@@ -116,6 +118,9 @@
private static final String XML_SOCKET_APPENDER_SERVICE_NAME = "_log4j_xml_tcpconnect_appender.local.";
private static final String SOCKET_APPENDER_SERVICE_NAME = "_log4j_obj_tcpconnect_appender.local.";
private static final String SOCKETHUB_APPENDER_SERVICE_NAME = "_log4j_obj_tcpaccept_appender.local.";
+ private static final String TCP_APPENDER_SERVICE_NAME = "_log4j._tcp.local.";
+ private static final String NEW_UDP_APPENDER_SERVICE_NAME = "_log4j._udp.local.";
+
private JmDNS jmDNS;
public ZeroConfPlugin() {
@@ -125,7 +130,11 @@
public void shutdown() {
if (jmDNS != null) {
- jmDNS.close();
+ try {
+ jmDNS.close();
+ } catch (Exception e) {
+ LOG.error("Unable to close JMDNS", e);
+ }
}
save();
}
@@ -207,6 +216,8 @@
serviceNames.add(SOCKETHUB_APPENDER_SERVICE_NAME);
serviceNames.add(UDP_APPENDER_SERVICE_NAME);
serviceNames.add(XML_SOCKET_APPENDER_SERVICE_NAME);
+ serviceNames.add(TCP_APPENDER_SERVICE_NAME);
+ serviceNames.add(NEW_UDP_APPENDER_SERVICE_NAME);
for (Iterator iter = serviceNames.iterator(); iter.hasNext();) {
String serviceName = iter.next().toString();
@@ -489,6 +500,41 @@
String name = info.getName();
String decoderClass = info.getPropertyString("decoder");
+ if (NEW_UDP_APPENDER_SERVICE_NAME.equals(zone))
+ {
+ UDPReceiver receiver = new UDPReceiver();
+ receiver.setPort(port);
+ receiver.setName(name + "-receiver");
+ return receiver;
+ }
+ //FileAppender or socketappender
+ //TODO: add more checks (actual layout format, etc)
+ if (TCP_APPENDER_SERVICE_NAME.equals(zone)) {
+ //CHECK content type
+ //application/octet-stream = SocketReceiver
+ //text/plain = VFSLogFilePatternReceiver (if structured=false)
+ String contentType = info.getPropertyString("contentType").toLowerCase();
+ //won't work with log4j2, as Chainsaw depends on log4j1.x
+ if ("application/octet-stream".equals(contentType))
+ {
+ SocketReceiver receiver = new SocketReceiver();
+ receiver.setPort(port);
+ receiver.setName(name + "-receiver");
+ return receiver;
+ }
+ //this will work - regular text log files are fine
+ if ("text/plain".equals(contentType))
+ {
+ VFSLogFilePatternReceiver receiver = new VFSLogFilePatternReceiver();
+ receiver.setAppendNonMatches(true);
+ receiver.setFileURL(info.getPropertyString("fileURI"));
+ receiver.setLogFormat(LogFilePatternLayoutBuilder.getLogFormatFromPatternLayout(info.getPropertyString("format")));
+ receiver.setTimestampFormat(LogFilePatternLayoutBuilder.getTimeStampFormat(info.getPropertyString("format")));
+ receiver.setName(name + "-receiver");
+ return receiver;
+ }
+ }
+
//MulticastAppender
if (MULTICAST_APPENDER_SERVICE_NAME.equals(zone)) {
MulticastReceiver receiver = new MulticastReceiver();