in src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java [462:533]
private ChainsawReceiver getReceiver(ServiceInfo info) {
String zone = info.getType();
int port = info.getPort();
String hostAddress = info.getHostAddress();
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
//text/plain = VFSLogFilePatternReceiver (if structured=false)
// String contentType = info.getPropertyString("contentType").toLowerCase();
// //won't work with log4j2, as Chainsaw depends on log4j1.x
// //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");
// receiver.setTailing(true);
// return receiver;
// }
}
//MulticastAppender
if (MULTICAST_APPENDER_SERVICE_NAME.equals(zone)) {
MulticastReceiver receiver = new MulticastReceiver();
//this needs to be a multicast address, not the host address, so we need to use a property
receiver.setAddress(info.getPropertyString("multicastAddress"));
receiver.setPort(port);
receiver.setName(name + "-receiver");
if (decoderClass != null && !decoderClass.equals("")) {
receiver.setDecoder(decoderClass);
}
return receiver;
}
//UDPAppender
if (UDP_APPENDER_SERVICE_NAME.equals(zone)) {
UDPReceiver receiver = new UDPReceiver();
receiver.setPort(port);
receiver.setName(name + "-receiver");
if (decoderClass != null && !decoderClass.equals("")) {
receiver.setDecoder(decoderClass);
}
return receiver;
}
//non-log4j XML-based socketappender
if (XML_SOCKET_APPENDER_SERVICE_NAME.equals(zone)) {
XMLSocketReceiver receiver = new XMLSocketReceiver();
receiver.setPort(port);
receiver.setName(name + "-receiver");
if (decoderClass != null && !decoderClass.equals("")) {
receiver.setDecoder(decoderClass);
}
return receiver;
}
//not recognized
LOG.debug("Unable to find receiver for appender with service name: " + zone);
return null;
}