Removing SocketReceiver, SocketHubReceiver
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
index 2c6924b..347ea2b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
@@ -19,7 +19,6 @@
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.LogManager;
import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.net.SocketReceiver;
import org.apache.log4j.rule.ExpressionRule;
import org.apache.log4j.rule.Rule;
import org.apache.log4j.spi.LoggerRepositoryEx;
@@ -127,29 +126,6 @@
}
/**
- * A little test bed
- *
- * @param args
- */
- public static void main(String[] args) throws InterruptedException {
- ChainsawAppenderHandler handler = new ChainsawAppenderHandler();
- handler.addEventBatchListener(new EventBatchListener() {
- public String getInterestedIdentifier() {
- return null;
- }
-
- public void receiveEventBatch(String identifier, List<LoggingEvent> events) {
- System.out.println("received " + events.size());
- }
- });
- LogManager.getRootLogger().addAppender(handler);
- SocketReceiver receiver = new SocketReceiver(4445);
- ((LoggerRepositoryEx) LogManager.getLoggerRepository()).getPluginRegistry().addPlugin(receiver);
- receiver.activateOptions();
- Thread.sleep(60000);
- }
-
- /**
* Exposes the current Data rate calculated. This is periodically updated by
* an internal Thread as is the number of events that have been processed, and
* dispatched to all listeners since the last sample period divided by the
diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
index 2faa1bb..42e0409 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
@@ -20,7 +20,6 @@
import org.apache.log4j.Logger;
import org.apache.log4j.chainsaw.helper.SwingHelper;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.net.SocketReceiver;
import org.apache.log4j.net.UDPReceiver;
import org.apache.log4j.plugins.Receiver;
@@ -290,7 +289,6 @@
networkReceiverPortComboBox.setOpaque(false);
networkReceiverClassNameComboBoxModel = new DefaultComboBoxModel<>();
- networkReceiverClassNameComboBoxModel.addElement(SocketReceiver.class.getName());
networkReceiverClassNameComboBoxModel.addElement(UDPReceiver.class.getName());
networkReceiverClassNameComboBox = new JComboBox<>(networkReceiverClassNameComboBoxModel);
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
index f6cccae..3dc30e6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
@@ -21,7 +21,6 @@
import org.apache.log4j.chainsaw.help.HelpManager;
import org.apache.log4j.chainsaw.helper.OkCancelPanel;
import org.apache.log4j.chainsaw.messages.MessageCenter;
-import org.apache.log4j.net.SocketHubReceiver;
import org.apache.log4j.plugins.Plugin;
import org.apache.log4j.plugins.Receiver;
@@ -146,26 +145,6 @@
return panel;
}
- public static void main(String[] args) throws Exception {
-
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-
- NewReceiverDialogPanel panel = NewReceiverDialogPanel.create(
- SocketHubReceiver.class);
-
- JDialog dialog = new JDialog((JFrame) null, true);
- dialog.getContentPane().add(panel);
-
- ActionListener al = e -> System.exit(1);
-
- panel.okPanel.getOkButton().addActionListener(al);
- panel.okPanel.getCancelButton().addActionListener(al);
-
- dialog.pack();
-
- dialog.setVisible(true);
- }
-
/**
* @return Returns the okPanel.
*/
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
index 01c41dc..12153ce 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
@@ -22,7 +22,6 @@
import org.apache.log4j.chainsaw.ChainsawConstants;
import org.apache.log4j.chainsaw.Generator;
import org.apache.log4j.chainsaw.helper.TableCellEditorFactory;
-import org.apache.log4j.net.SocketHubReceiver;
import org.apache.log4j.plugins.Plugin;
import javax.swing.*;
@@ -112,38 +111,6 @@
});
}
- public static void main(String[] args) {
-
- JFrame frame = new JFrame("Property Editor Test bed");
- frame.addWindowListener(new WindowAdapter() {
- public void windowClosed(WindowEvent e) {
- System.exit(1);
- }
- });
-
- PluginPropertyEditorPanel panel = new PluginPropertyEditorPanel();
-
-
- frame.getContentPane().add(panel);
- frame.pack();
-
- frame.setVisible(true);
-
- SocketHubReceiver r = new SocketHubReceiver();
-
- panel.setPlugin(r);
-
- try {
- Thread.sleep(3000);
-
- panel.setPlugin(new Generator("MyPlugin"));
- } catch (Exception e) {
- // TODO: handle exception
- }
-
-
- }
-
/**
* @return Returns the plugin.
*/
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
index 063b539..8764cd1 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
@@ -33,7 +33,6 @@
import org.apache.log4j.chainsaw.prefs.SettingsListener;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
import org.apache.log4j.net.SocketNodeEventListener;
-import org.apache.log4j.net.SocketReceiver;
import org.apache.log4j.plugins.*;
import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.LoggerRepositoryEx;
@@ -376,19 +375,6 @@
updateReceiverTreeInDispatchThread();
}
};
-
- /**
- * add this listener to all SocketReceivers
- */
- if (pluginRegistry != null) {
- List socketReceivers =
- pluginRegistry.getPlugins(SocketReceiver.class);
-
- for (Object socketReceiver : socketReceivers) {
- SocketReceiver element = (SocketReceiver) socketReceiver;
- element.addSocketNodeEventListener(listener);
- }
- }
}
private void saveReceivers() {
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
index 0f363e4..accfdab 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
@@ -19,7 +19,6 @@
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
-import org.apache.log4j.net.SocketReceiver;
import org.apache.log4j.plugins.Plugin;
import org.apache.log4j.plugins.PluginEvent;
import org.apache.log4j.plugins.PluginListener;
@@ -83,12 +82,6 @@
final DefaultMutableTreeNode receiverNode = new DefaultMutableTreeNode(item);
item.addPropertyChangeListener(creatPluginPropertyChangeListener(item, receiverNode));
- if (item instanceof SocketReceiver) {
- for (Object details : ((SocketReceiver) item).getConnectedSocketDetails()) {
- receiverNode.add(new DefaultMutableTreeNode(details));
- }
- }
-
getRootNode().add(receiverNode);
}
}
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 3f8ccf7..ba36fa3 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -91,8 +91,6 @@
private static final String MULTICAST_APPENDER_SERVICE_NAME = "_log4j_xml_mcast_appender.local.";
private static final String UDP_APPENDER_SERVICE_NAME = "_log4j_xml_udp_appender.local.";
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.";
@@ -187,8 +185,6 @@
private void registerServiceListenersForAppenders() {
Set<String> serviceNames = new HashSet<>();
serviceNames.add(MULTICAST_APPENDER_SERVICE_NAME);
- serviceNames.add(SOCKET_APPENDER_SERVICE_NAME);
- 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);
@@ -481,16 +477,9 @@
//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();
@@ -539,22 +528,6 @@
return receiver;
}
- //SocketAppender
- if (SOCKET_APPENDER_SERVICE_NAME.equals(zone)) {
- SocketReceiver receiver = new SocketReceiver();
- receiver.setPort(port);
- receiver.setName(name + "-receiver");
- return receiver;
- }
-
- //SocketHubAppender
- if (SOCKETHUB_APPENDER_SERVICE_NAME.equals(zone)) {
- SocketHubReceiver receiver = new SocketHubReceiver();
- receiver.setHost(hostAddress);
- receiver.setPort(port);
- receiver.setName(name + "-receiver");
- return receiver;
- }
//not recognized
LogLog.debug("Unable to find receiver for appender with service name: " + zone);
return null;
diff --git a/src/main/java/org/apache/log4j/net/SocketHubReceiver.java b/src/main/java/org/apache/log4j/net/SocketHubReceiver.java
deleted file mode 100644
index 7cc398d..0000000
--- a/src/main/java/org/apache/log4j/net/SocketHubReceiver.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import org.apache.log4j.plugins.Plugin;
-import org.apache.log4j.plugins.Receiver;
-import org.apache.log4j.spi.LoggerRepository;
-
-import java.io.IOException;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * SocketHubReceiver receives a remote logging event on a configured
- * socket and "posts" it to a LoggerRepository as if the event was
- * generated locally. This class is designed to receive events from
- * the SocketHubAppender class (or classes that send compatible events).
- * <p>
- * <p>Once the event has been "posted", it will be handled by the
- * appenders currently configured in the LoggerRespository.
- *
- * @author Mark Womack
- * @author Ceki Gülcü
- * @author Paul Smith (psmith@apache.org)
- */
-public class SocketHubReceiver
- extends Receiver implements SocketNodeEventListener, PortBased {
-
- /**
- * Default reconnection delay.
- */
- static final int DEFAULT_RECONNECTION_DELAY = 30000;
-
- /**
- * Host.
- */
- protected String host;
-
- /**
- * Port.
- */
- protected int port;
- /**
- * Reconnection delay.
- */
- protected int reconnectionDelay = DEFAULT_RECONNECTION_DELAY;
-
- /**
- * The MulticastDNS zone advertised by a SocketHubReceiver
- */
- public static final String ZONE = "_log4j_obj_tcpconnect_receiver.local.";
-
- /**
- * Active.
- */
- protected boolean active = false;
-
- /**
- * Connector.
- */
- protected Connector connector;
-
- /**
- * Socket.
- */
- protected SocketNode13 socketNode;
-
- /**
- * Listener list.
- */
- private final List listenerList = Collections.synchronizedList(new ArrayList());
-
- private boolean advertiseViaMulticastDNS;
- private ZeroConfSupport zeroConf;
-
- /**
- * Create new instance.
- */
- public SocketHubReceiver() {
- super();
- }
-
- /**
- * Create new instance.
- *
- * @param h host
- * @param p port
- */
- public SocketHubReceiver(final String h,
- final int p) {
- super();
- host = h;
- port = p;
- }
-
- /**
- * Create new instance.
- *
- * @param h host
- * @param p port
- * @param repo logger repository
- */
- public SocketHubReceiver(final String h,
- final int p,
- final LoggerRepository repo) {
- super();
- host = h;
- port = p;
- repository = repo;
- }
-
- /**
- * Adds a SocketNodeEventListener to this receiver to be notified
- * of SocketNode events.
- *
- * @param l listener
- */
- public void addSocketNodeEventListener(final SocketNodeEventListener l) {
- listenerList.add(l);
- }
-
- /**
- * Removes a specific SocketNodeEventListener from this instance
- * so that it will no longer be notified of SocketNode events.
- *
- * @param l listener
- */
- public void removeSocketNodeEventListener(
- final SocketNodeEventListener l) {
- listenerList.remove(l);
- }
-
- /**
- * Get the remote host to connect to for logging events.
- *
- * @return host
- */
- public String getHost() {
- return host;
- }
-
- /**
- * Configures the Host property, this will require activateOptions
- * to be called for this to take effect.
- *
- * @param remoteHost address of remote host.
- */
- public void setHost(final String remoteHost) {
- this.host = remoteHost;
- }
-
- /**
- * Set the remote host to connect to for logging events.
- * Equivalent to setHost.
- *
- * @param remoteHost address of remote host.
- */
- public void setPort(final String remoteHost) {
- host = remoteHost;
- }
-
- /**
- * Get the remote port to connect to for logging events.
- *
- * @return port
- */
- public int getPort() {
- return port;
- }
-
- /**
- * Set the remote port to connect to for logging events.
- *
- * @param p port
- */
- public void setPort(final int p) {
- this.port = p;
- }
-
- /**
- * The <b>ReconnectionDelay</b> option takes a positive integer
- * representing the number of milliseconds to wait between each
- * failed connection attempt to the server. The default value of
- * this option is 30000 which corresponds to 30 seconds.
- * <p>
- * <p>Setting this option to zero turns off reconnection
- * capability.
- *
- * @param delay milliseconds to wait or zero to not reconnect.
- */
- public void setReconnectionDelay(final int delay) {
- int oldValue = this.reconnectionDelay;
- this.reconnectionDelay = delay;
- firePropertyChange("reconnectionDelay", oldValue, this.reconnectionDelay);
- }
-
- /**
- * Returns value of the <b>ReconnectionDelay</b> option.
- *
- * @return value of reconnection delay option.
- */
- public int getReconnectionDelay() {
- return reconnectionDelay;
- }
-
- /**
- * Returns true if the receiver is the same class and they are
- * configured for the same properties, and super class also considers
- * them to be equivalent. This is used by PluginRegistry when determining
- * if the a similarly configured receiver is being started.
- *
- * @param testPlugin The plugin to test equivalency against.
- * @return boolean True if the testPlugin is equivalent to this plugin.
- */
- public boolean isEquivalent(final Plugin testPlugin) {
- if (testPlugin != null && testPlugin instanceof SocketHubReceiver) {
- SocketHubReceiver sReceiver = (SocketHubReceiver) testPlugin;
-
- return (port == sReceiver.getPort()
- && host.equals(sReceiver.getHost())
- && reconnectionDelay == sReceiver.getReconnectionDelay()
- && super.isEquivalent(testPlugin));
- }
- return false;
- }
-
- /**
- * Sets the flag to indicate if receiver is active or not.
- *
- * @param b new value
- */
- protected synchronized void setActive(final boolean b) {
- active = b;
- }
-
- /**
- * Starts the SocketReceiver with the current options.
- */
- public void activateOptions() {
- if (!isActive()) {
- setActive(true);
- if (advertiseViaMulticastDNS) {
- zeroConf = new ZeroConfSupport(ZONE, port, getName());
- zeroConf.advertise();
- }
-
- fireConnector(false);
- }
- }
-
- /**
- * Called when the receiver should be stopped. Closes the socket
- */
- public synchronized void shutdown() {
- // mark this as no longer running
- active = false;
-
- // close the socket
- try {
- if (socketNode != null) {
- socketNode.close();
- socketNode = null;
- }
- } catch (Exception e) {
- getLogger().info("Excpetion closing socket", e);
- // ignore for now
- }
-
- // stop the connector
- if (connector != null) {
- connector.interrupted = true;
- connector = null; // allow gc
- }
- if (advertiseViaMulticastDNS) {
- zeroConf.unadvertise();
- }
- }
-
- /**
- * Listen for a socketClosedEvent from the SocketNode. Reopen the
- * socket if this receiver is still active.
- *
- * @param e exception not used.
- */
- public void socketClosedEvent(final Exception e) {
- // if it is a non-normal closed event
- // we clear the connector object here
- // so that it actually does reconnect if the
- // remote socket dies.
- if (e != null) {
- connector = null;
- fireConnector(true);
- }
- }
-
- /**
- * Fire connectors.
- *
- * @param isReconnect true if reconnect.
- */
- private synchronized void fireConnector(final boolean isReconnect) {
- if (active && connector == null) {
- getLogger().debug("Starting a new connector thread.");
- connector = new Connector(isReconnect);
- connector.setDaemon(true);
- connector.setPriority(Thread.MIN_PRIORITY);
- connector.start();
- }
- }
-
- /**
- * Set socket.
- *
- * @param newSocket new value for socket.
- */
- private synchronized void setSocket(final Socket newSocket) {
- connector = null;
- socketNode = new SocketNode13(newSocket, this);
- socketNode.addSocketNodeEventListener(this);
-
- synchronized (listenerList) {
- for (Object aListenerList : listenerList) {
- SocketNodeEventListener listener =
- (SocketNodeEventListener) aListenerList;
- socketNode.addSocketNodeEventListener(listener);
- }
- }
- new Thread(socketNode).start();
- }
-
- public void setAdvertiseViaMulticastDNS(boolean advertiseViaMulticastDNS) {
- this.advertiseViaMulticastDNS = advertiseViaMulticastDNS;
- }
-
- public boolean isAdvertiseViaMulticastDNS() {
- return advertiseViaMulticastDNS;
- }
-
- /**
- * The Connector will reconnect when the server becomes available
- * again. It does this by attempting to open a new connection every
- * <code>reconnectionDelay</code> milliseconds.
- * <p>
- * <p>It stops trying whenever a connection is established. It will
- * restart to try reconnect to the server when previpously open
- * connection is droppped.
- *
- * @author Ceki Gülcü
- */
- private final class Connector extends Thread {
-
- /**
- * Interruption status.
- */
- boolean interrupted = false;
- /**
- * If true, then delay on next iteration.
- */
- boolean doDelay;
-
- /**
- * Create new instance.
- *
- * @param isReconnect true if reconnecting.
- */
- public Connector(final boolean isReconnect) {
- super();
- doDelay = isReconnect;
- }
-
- /**
- * Attempt to connect until interrupted.
- */
- public void run() {
- while (!interrupted) {
- try {
- if (doDelay) {
- getLogger().debug("waiting for " + reconnectionDelay
- + " milliseconds before reconnecting.");
- sleep(reconnectionDelay);
- }
- doDelay = true;
- getLogger().debug("Attempting connection to " + host);
- Socket s = new Socket(host, port);
- setSocket(s);
- getLogger().debug(
- "Connection established. Exiting connector thread.");
- break;
- } catch (InterruptedException e) {
- getLogger().debug("Connector interrupted. Leaving loop.");
- return;
- } catch (java.net.ConnectException e) {
- getLogger().debug("Remote host {} refused connection.", host);
- } catch (IOException e) {
- getLogger().debug("Could not connect to {}. Exception is {}.",
- host, e);
- }
- }
- }
- }
-
- /**
- * This method does nothing.
- *
- * @param remoteInfo remote info.
- */
- public void socketOpened(final String remoteInfo) {
-
- // This method does nothing.
- }
-}
diff --git a/src/main/java/org/apache/log4j/net/SocketNode13.java b/src/main/java/org/apache/log4j/net/SocketNode13.java
deleted file mode 100644
index 281fdb3..0000000
--- a/src/main/java/org/apache/log4j/net/SocketNode13.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.helpers.Constants;
-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.net.Socket;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-
-// Contributors: Moses Hohman <mmhohman@rainbow.uchicago.edu>
-
-/**
- * Read {@link LoggingEvent} objects sent from a remote client using
- * Sockets (TCP). These logging events are logged according to local
- * policy, as if they were generated locally.
- * <p>
- * <p>For example, the socket node might decide to log events to a
- * local file and also resent them to a second socket node.
- * <p>
- * Implementation lifted from org.apache.log4j.net.SocketNode
- * in log4j 1.3 and renamed to prevent collision with
- * log4j 1.2 implementation.
- *
- * @author Ceki Gülcü
- * @author Paul Smith (psmith@apache.org)
- */
-public class SocketNode13 extends ComponentBase implements Runnable, Pauseable {
-
- /**
- * Paused state.
- */
- private boolean paused;
- /**
- * Closed state.
- */
- private boolean closed;
- /**
- * Socket.
- */
- private Socket socket;
- /**
- * Receiver.
- */
- private Receiver receiver;
- /**
- * List of listeners.
- */
- private final List listenerList = Collections.synchronizedList(new ArrayList());
-
-
- /**
- * Constructor for socket and logger repository.
- *
- * @param s socket
- * @param hierarchy logger repository
- */
- public SocketNode13(final Socket s,
- final LoggerRepository hierarchy) {
- super();
- this.socket = s;
- this.repository = hierarchy;
- }
-
- /**
- * Constructor for socket and receiver.
- *
- * @param s socket
- * @param r receiver
- */
- public SocketNode13(final Socket s, final Receiver r) {
- super();
- this.socket = s;
- this.receiver = r;
- }
-
- /**
- * Set the event listener on this node.
- *
- * @param l listener
- * @deprecated Now supports mutliple listeners, this method
- * simply invokes the removeSocketNodeEventListener() to remove
- * the listener, and then readds it.
- */
- public void setListener(final SocketNodeEventListener l) {
- removeSocketNodeEventListener(l);
- addSocketNodeEventListener(l);
- }
-
- /**
- * Adds the listener to the list of listeners to be notified of the
- * respective event.
- *
- * @param listener the listener to add to the list
- */
- public void addSocketNodeEventListener(
- final SocketNodeEventListener listener) {
- listenerList.add(listener);
- }
-
- /**
- * Removes the registered Listener from this instances list of
- * listeners. If the listener has not been registered, then invoking
- * this method has no effect.
- *
- * @param listener the SocketNodeEventListener to remove
- */
- public void removeSocketNodeEventListener(
- final SocketNodeEventListener listener) {
- listenerList.remove(listener);
- }
-
-
- /**
- * Deserialize events from socket until interrupted.
- */
- public void run() {
- LoggingEvent event;
- Logger remoteLogger;
- Exception listenerException = null;
- ObjectInputStream ois;
-
- try {
- ois =
- new ObjectInputStream(
- new BufferedInputStream(socket.getInputStream()));
- } catch (Exception e) {
- ois = null;
- listenerException = e;
- getLogger().error("Exception opening ObjectInputStream to " + socket, e);
- }
-
- if (ois != null) {
-
- String hostName = socket.getInetAddress().getHostName();
- String remoteInfo = hostName + ":" + socket.getPort();
-
- /**
- * notify the listener that the socket has been
- * opened and this SocketNode is ready and waiting
- */
- fireSocketOpened(remoteInfo);
-
- try {
- while (!isClosed()) {
- // read an event from the wire
- event = (LoggingEvent) ois.readObject();
- event.setProperty(Constants.HOSTNAME_KEY, hostName);
- // store the known remote info in an event property
- event.setProperty("log4j.remoteSourceInfo", remoteInfo);
-
- // if configured with a receiver, tell it to post the event
- if (!isPaused() && !isClosed()) {
- if ((receiver != null)) {
- receiver.doPost(event);
-
- // else post it via the hierarchy
- } else {
- // get a logger from the hierarchy. The name of the logger
- // is taken to be the name contained in the event.
- remoteLogger = repository.getLogger(event.getLoggerName());
-
- //event.logger = remoteLogger;
- // apply the logger-level filter
- if (event
- .getLevel()
- .isGreaterOrEqual(remoteLogger.getEffectiveLevel())) {
- // finally log the event as if was generated locally
- remoteLogger.callAppenders(event);
- }
- }
- } else {
- //we simply discard this event.
- }
- }
- } catch (java.io.EOFException e) {
- getLogger().info("Caught java.io.EOFException closing connection.");
- listenerException = e;
- } catch (java.net.SocketException e) {
- getLogger().info("Caught java.net.SocketException closing connection.");
- listenerException = e;
- } catch (IOException e) {
- getLogger().info("Caught java.io.IOException: " + e);
- getLogger().info("Closing connection.");
- listenerException = e;
- } catch (Exception e) {
- getLogger().error("Unexpected exception. Closing connection.", e);
- listenerException = e;
- }
- }
-
- // close the socket
- try {
- if (ois != null) {
- ois.close();
- }
- } catch (Exception e) {
- //getLogger().info("Could not close connection.", e);
- }
-
- // send event to listener, if configured
- if (listenerList.size() > 0 && !isClosed()) {
- fireSocketClosedEvent(listenerException);
- }
- }
-
- /**
- * Notifies all registered listeners regarding the closing of the Socket.
- *
- * @param listenerException listener exception
- */
- private void fireSocketClosedEvent(final Exception listenerException) {
- synchronized (listenerList) {
- for (Object aListenerList : listenerList) {
- SocketNodeEventListener snel =
- (SocketNodeEventListener) aListenerList;
- if (snel != null) {
- snel.socketClosedEvent(listenerException);
- }
- }
- }
- }
-
- /**
- * Notifies all registered listeners regarding the opening of a Socket.
- *
- * @param remoteInfo remote info
- */
- private void fireSocketOpened(final String remoteInfo) {
- synchronized (listenerList) {
- for (Object aListenerList : listenerList) {
- SocketNodeEventListener snel =
- (SocketNodeEventListener) aListenerList;
- if (snel != null) {
- snel.socketOpened(remoteInfo);
- }
- }
- }
- }
-
- /**
- * Sets if node is paused.
- *
- * @param b new value
- */
- public void setPaused(final boolean b) {
- this.paused = b;
- }
-
- /**
- * Get if node is paused.
- *
- * @return true if pause.
- */
- public boolean isPaused() {
- return this.paused;
- }
-
- /**
- * Close the node and underlying socket
- */
- public void close() throws IOException {
- getLogger().debug("closing socket");
- this.closed = true;
- socket.close();
- fireSocketClosedEvent(null);
- }
-
- /**
- * Get if node is closed.
- *
- * @return true if closed.
- */
- public boolean isClosed() {
- return this.closed;
- }
-}
diff --git a/src/main/java/org/apache/log4j/net/SocketReceiver.java b/src/main/java/org/apache/log4j/net/SocketReceiver.java
deleted file mode 100644
index b120142..0000000
--- a/src/main/java/org/apache/log4j/net/SocketReceiver.java
+++ /dev/null
@@ -1,503 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import org.apache.log4j.plugins.Pauseable;
-import org.apache.log4j.plugins.Plugin;
-import org.apache.log4j.plugins.Receiver;
-import org.apache.log4j.spi.LoggerRepository;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.util.*;
-
-
-/**
- * SocketReceiver receives a remote logging event on a configured
- * socket and "posts" it to a LoggerRepository as if the event was
- * generated locally. This class is designed to receive events from
- * the SocketAppender class (or classes that send compatible events).
- * <p>
- * <p>Once the event has been "posted", it will be handled by the
- * appenders currently configured in the LoggerRespository.
- *
- * @author Mark Womack
- * @author Scott Deboy (sdeboy@apache.org)
- * @author Paul Smith (psmith@apache.org)
- */
-public class SocketReceiver extends Receiver implements Runnable, PortBased,
- Pauseable {
- /**
- * socket map.
- */
- private Map<Socket, SocketNode13> socketMap = new HashMap<>();
- /**
- * Paused.
- */
- private boolean paused;
- /**
- * Thread.
- */
- private Thread rThread;
- /**
- * Port.
- */
- protected int port;
- /**
- * Server socket.
- */
- private ServerSocket serverSocket;
- /**
- * Socket list.
- */
- private Vector<Socket> socketList = new Vector<>();
-
- /**
- * The MulticastDNS zone advertised by a SocketReceiver
- */
- public static final String ZONE = "_log4j_obj_tcpaccept_receiver.local.";
-
- /**
- * Listener.
- */
- private SocketNodeEventListener listener = null;
- /**
- * Listeners.
- */
- private final List listenerList = Collections.synchronizedList(new ArrayList());
- private boolean advertiseViaMulticastDNS;
- private ZeroConfSupport zeroConf;
-
- /**
- * Create new instance.
- */
- public SocketReceiver() {
- super();
- }
-
- /**
- * Create new instance.
- *
- * @param p port
- */
- public SocketReceiver(final int p) {
- super();
- port = p;
- }
-
- /**
- * Create new instance.
- *
- * @param p port
- * @param repo logger repository
- */
- public SocketReceiver(final int p, final LoggerRepository repo) {
- super();
- this.port = p;
- repository = repo;
- }
-
- /**
- * {@inheritDoc}
- */
- public int getPort() {
- return port;
- }
-
- /**
- * {@inheritDoc}
- */
- public void setPort(final int p) {
- port = p;
- }
-
- /**
- * Returns true if the receiver is the same class and they are
- * configured for the same properties, and super class also considers
- * them to be equivalent. This is used by PluginRegistry when determining
- * if the a similarly configured receiver is being started.
- *
- * @param testPlugin The plugin to test equivalency against.
- * @return boolean True if the testPlugin is equivalent to this plugin.
- */
- public boolean isEquivalent(final Plugin testPlugin) {
- if ((testPlugin != null) && testPlugin instanceof SocketReceiver) {
- SocketReceiver sReceiver = (SocketReceiver) testPlugin;
-
- return (port == sReceiver.getPort() && super.isEquivalent(testPlugin));
- }
-
- return false;
- }
-
- /**
- * Starts the SocketReceiver with the current options.
- */
- public void activateOptions() {
- if (!isActive()) {
- // shutdown();
- rThread = new Thread(this);
- rThread.setDaemon(true);
- rThread.start();
- if (advertiseViaMulticastDNS) {
- zeroConf = new ZeroConfSupport(ZONE, port, getName());
- zeroConf.advertise();
- }
-
- active = true;
- }
- }
-
- /**
- * Called when the receiver should be stopped. Closes the
- * server socket and all of the open sockets.
- */
- public synchronized void shutdown() {
- getLogger().debug(getName() + " received shutdown request");
-
- // mark this as no longer running
- active = false;
-
- if (rThread != null) {
- rThread.interrupt();
- rThread = null;
- }
- if (advertiseViaMulticastDNS) {
- zeroConf.unadvertise();
- }
-
- doShutdown();
- }
-
- /**
- * Does the actual shutting down by closing the server socket
- * and any connected sockets that have been created.
- */
- private synchronized void doShutdown() {
- active = false;
-
- getLogger().debug(getName() + " doShutdown called");
-
- // close the server socket
- closeServerSocket();
-
- // close all of the accepted sockets
- closeAllAcceptedSockets();
- }
-
- /**
- * Closes the server socket, if created.
- */
- private void closeServerSocket() {
- getLogger().debug("{} closing server socket", getName());
-
- try {
- if (serverSocket != null) {
- serverSocket.close();
- }
- } catch (Exception e) {
- // ignore for now
- }
-
- serverSocket = null;
- }
-
- /**
- * Closes all the connected sockets in the List.
- */
- private synchronized void closeAllAcceptedSockets() {
- for (Object aSocketList : socketList) {
- try {
- ((Socket) aSocketList).close();
- } catch (Exception e) {
- // ignore for now
- }
- }
-
- // clear member variables
- socketMap.clear();
- socketList.clear();
- }
-
- /**
- * Sets the flag to indicate if receiver is active or not.
- *
- * @param b new value
- */
- protected synchronized void setActive(final boolean b) {
- active = b;
- }
-
- public void setAdvertiseViaMulticastDNS(boolean advertiseViaMulticastDNS) {
- this.advertiseViaMulticastDNS = advertiseViaMulticastDNS;
- }
-
- public boolean isAdvertiseViaMulticastDNS() {
- return advertiseViaMulticastDNS;
- }
-
- /**
- * Loop, accepting new socket connections.
- */
- public void run() {
- /**
- * Ensure we start fresh.
- */
- closeServerSocket();
- closeAllAcceptedSockets();
-
- // start the server socket
- try {
- serverSocket = new ServerSocket(port);
- } catch (Exception e) {
- getLogger().error(
- "error starting SocketReceiver (" + this.getName()
- + "), receiver did not start", e);
- active = false;
-
- return;
- }
-
- Socket socket = null;
-
- try {
- getLogger().debug("in run-about to enter while not interrupted loop");
-
- active = true;
-
- while (!rThread.isInterrupted()) {
- // if we have a socket, start watching it
- if (socket != null) {
- getLogger().debug(
- "socket not null - creating and starting socketnode");
- socketList.add(socket);
-
- SocketNode13 node = new SocketNode13(socket, this);
- synchronized (listenerList) {
- for (Object aListenerList : listenerList) {
- SocketNodeEventListener l =
- (SocketNodeEventListener) aListenerList;
- node.addSocketNodeEventListener(l);
- }
- }
- socketMap.put(socket, node);
- new Thread(node).start();
- socket = null;
- }
-
- getLogger().debug("waiting to accept socket");
-
- // wait for a socket to open, then loop to start it
- socket = serverSocket.accept();
- getLogger().debug("accepted socket");
- }
- } catch (Exception e) {
- getLogger().warn(
- "exception while watching socket server in SocketReceiver ("
- + this.getName() + "), stopping");
- }
-
- getLogger().debug("{} has exited the not interrupted loop", getName());
-
- // socket not watched because we a no longer running
- // so close it now.
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e1) {
- getLogger().warn("socket exception caught - socket closed");
- }
- }
-
- getLogger().debug("{} is exiting main run loop", getName());
- }
-
- /**
- * Returns a Vector of SocketDetail representing the IP/Domain name
- * of the currently connected sockets that this receiver has
- * been responsible for creating.
- *
- * @return Vector of SocketDetails
- */
- public Vector<SocketDetail> getConnectedSocketDetails() {
- Vector<SocketDetail> details = new Vector<>(socketList.size());
-
- for (Enumeration<Socket> enumeration = socketList.elements();
- enumeration.hasMoreElements();
- ) {
- Socket socket = enumeration.nextElement();
- details.add(
- new SocketDetail(socket, socketMap.get(socket)));
- }
-
- return details;
- }
-
- /**
- * Returns the currently configured SocketNodeEventListener that
- * will be automatically set for each SocketNode created.
- *
- * @return SocketNodeEventListener currently configured
- * @deprecated This receiver now supports multiple listeners
- */
- public SocketNodeEventListener getListener() {
- return listener;
- }
-
- /**
- * Adds the listener to the list of listeners to be notified of the
- * respective event.
- *
- * @param l the listener to add to the list
- */
- public void addSocketNodeEventListener(
- final SocketNodeEventListener l) {
- listenerList.add(l);
- }
-
- /**
- * Removes the registered Listener from this instances list of
- * listeners. If the listener has not been registered, then invoking
- * this method has no effect.
- *
- * @param l the SocketNodeEventListener to remove
- */
- public void removeSocketNodeEventListener(
- final SocketNodeEventListener l) {
- listenerList.remove(l);
- }
-
- /**
- * Sets the SocketNodeEventListener that will be used for each
- * created SocketNode.
- *
- * @param l the listener to set on each creation of a SocketNode
- * @deprecated This receiver now supports multiple listeners and
- * so this method simply removes the listener (if there already)
- * and readds it to the list.
- * <p>
- * The passed listener will also be returned via the getListener()
- * method still, but this is also deprecated
- */
- public void setListener(final SocketNodeEventListener l) {
- removeSocketNodeEventListener(l);
- addSocketNodeEventListener(l);
- this.listener = l;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean isPaused() {
- return paused;
- }
-
- /**
- * {@inheritDoc}
- */
- public void setPaused(final boolean b) {
- paused = b;
- }
-
- /**
- * Socket detail.
- */
- private static final class SocketDetail implements AddressBased, PortBased,
- Pauseable {
- /**
- * Address.
- */
- private String address;
- /**
- * Port.
- */
- private int port;
- /**
- * Socket node.
- */
- private SocketNode13 socketNode;
-
- /**
- * Create new instance.
- *
- * @param socket socket
- * @param node socket node
- */
- private SocketDetail(final Socket socket,
- final SocketNode13 node) {
- super();
- this.address = socket.getInetAddress().getHostName();
- this.port = socket.getPort();
- this.socketNode = node;
- }
-
- /**
- * {@inheritDoc}
- */
- public String getAddress() {
- return address;
- }
-
- /**
- * {@inheritDoc}
- */
- public int getPort() {
- return port;
- }
-
- /**
- * {@inheritDoc}
- */
- public String getName() {
- return "Socket";
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean isActive() {
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean isPaused() {
- return socketNode.isPaused();
- }
-
- /**
- * {@inheritDoc}
- */
- public void setPaused(final boolean b) {
- socketNode.setPaused(b);
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public void doPost(final LoggingEvent event) {
- if (!isPaused()) {
- super.doPost(event);
- }
- }
-
-}
diff --git a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
index 56f45f5..eadea44 100644
--- a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
+++ b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
@@ -152,7 +152,7 @@
}
/**
- * Starts the SocketReceiver with the current options.
+ * Starts the XMLSocketReceiver with the current options.
*/
public void activateOptions() {
if (!isActive()) {
@@ -263,7 +263,7 @@
serverSocket = new ServerSocket(port);
} catch (Exception e) {
getLogger().error(
- "error starting SocketReceiver (" + this.getName()
+ "error starting XMLSocketReceiver (" + this.getName()
+ "), receiver did not start", e);
active = false;
doShutdown();
diff --git a/src/main/java/org/apache/log4j/plugins/Receiver.java b/src/main/java/org/apache/log4j/plugins/Receiver.java
index 628e25f..2765f42 100644
--- a/src/main/java/org/apache/log4j/plugins/Receiver.java
+++ b/src/main/java/org/apache/log4j/plugins/Receiver.java
@@ -31,15 +31,7 @@
* logging events inside the log4j environment.
* <p></p>
* <p>Receivers are meant to support the receiving of
- * remote logging events from another process. For example,
- * SocketAppender "appends" a logging event to a socket, configured
- * for a specific host and port number. On the receiving side of
- * the socket can be a SocketReceiver object. The SocketReceiver
- * object receives the logging event, and then "posts" it to the
- * log4j environment (LoggerRepository) on the receiving machine, to
- * be handled by the configured appenders, etc. The various
- * settings in this environment (Logger levels, Appender filters &
- * thresholds) are applied to the received logging event.
+ * remote logging events from another process.
* <p></p>
* <p>Receivers can also be used to "import" log messages from other
* logging packages into the log4j environment.
diff --git a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketHubReceiver.html b/src/main/resources/org/apache/log4j/chainsaw/Details_SocketHubReceiver.html
deleted file mode 100644
index 2f7c658..0000000
--- a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketHubReceiver.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<Head><link rel="stylesheet" href="stylesheet.css" type="text/css"></head>
-<body>
-<B>Socket Hub Receiver</b>
-<p>SocketHubReceiver compliments the SocketHubAppender. </p>
-
-<p>TODO</p>
-<p>Click here to see more information about SocketHubReceiver.</p>
-
-<p>Click <a href="http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/net/SocketHubAppender.html">here</a> to see more information about SocketHubAppender.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketReceiver.html b/src/main/resources/org/apache/log4j/chainsaw/Details_SocketReceiver.html
deleted file mode 100644
index 264a003..0000000
--- a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketReceiver.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<Head><link rel="stylesheet" href="stylesheet.css" type="text/css"></head>
-<body>
-<B>Socket Receiver</b>
-<p>SocketReceiver compliments the SocketAppender. </p>
-
-<p>SocketReceiver listens
-on a specified port, accepting connections from remote sockets
-, de-serializes logging events received from these sockets,
-and posts them into Chainsaw's local Log4j environment allowing you
-to view them.</p>
-<p>Click here to see more information about SocketReceiver.</p>
-
-<p>Click <a href="http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/net/SocketAppender.html">here</a> to see more information about SocketAppender.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html b/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
index b25f6cd..9262de8 100644
--- a/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
+++ b/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
@@ -215,8 +215,6 @@
<ul>UDPAppender</ul>
<ul>MulticastAppender</ul>
Supported receivers:
- <ul>SocketReceiver</ul>
- <ul>SocketHubReceiver (also receives events from ZeroConfSocketHubAppender)</ul>
<ul>XMLSocketReceiver (can receive events sent over TCP by other logging frameworks)</ul>
<ul>UDPReceiver</ul>
<ul>MulticastReceiver</ul>
diff --git a/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers b/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers
index f05c820..bc13efb 100644
--- a/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers
+++ b/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers
@@ -17,8 +17,6 @@
# tests/src/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java test case
org.apache.log4j.net.MulticastReceiver
-org.apache.log4j.net.SocketHubReceiver
-org.apache.log4j.net.SocketReceiver
org.apache.log4j.net.UDPReceiver
org.apache.log4j.net.XMLSocketReceiver
org.apache.log4j.net.JMSReceiver
diff --git a/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java b/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java
index 01a718e..82dc7e6 100644
--- a/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java
+++ b/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java
@@ -22,12 +22,7 @@
import org.apache.log4j.chainsaw.receivers.ReceiversHelper;
import org.apache.log4j.chainsaw.vfs.VFSLogFilePatternReceiver;
-import org.apache.log4j.net.JMSReceiver;
-import org.apache.log4j.net.MulticastReceiver;
-import org.apache.log4j.net.SocketHubReceiver;
-import org.apache.log4j.net.SocketReceiver;
-import org.apache.log4j.net.UDPReceiver;
-import org.apache.log4j.net.XMLSocketReceiver;
+import org.apache.log4j.net.*;
import org.apache.log4j.db.DBReceiver;
import org.apache.log4j.varia.LogFilePatternReceiver;
@@ -52,9 +47,7 @@
Class[] expectedList =
new Class[] {
MulticastReceiver.class,
- SocketHubReceiver.class,
- SocketReceiver.class,
- UDPReceiver.class,
+ UDPReceiver.class,
XMLSocketReceiver.class,
LogFilePatternReceiver.class,
JMSReceiver.class,