org.apache.log4j.chainsaw.LoggingReceiver Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of log4j Show documentation
Show all versions of log4j Show documentation
Base Apache Log4j 1.2.17 fix the issus #4913 and #41214
/*
* 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.chainsaw;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
/**
* A daemon thread the processes connections from a
* org.apache.log4j.net.SocketAppender.html
.
*
* @author Oliver Burn
*/
class LoggingReceiver extends Thread {
/** used to log messages **/
private static final Logger LOG = Logger.getLogger(LoggingReceiver.class);
/**
* Helper that actually processes a client connection. It receives events
* and adds them to the supplied model.
*
* @author Oliver Burn
*/
private class Slurper implements Runnable {
/** socket connection to read events from **/
private final Socket mClient;
/**
* Creates a new Slurper
instance.
*
* @param aClient socket to receive events from
*/
Slurper(Socket aClient) {
mClient = aClient;
}
/** loops getting the events **/
public void run() {
LOG.debug("Starting to get data");
try {
final ObjectInputStream ois =
new ObjectInputStream(mClient.getInputStream());
while (true) {
final LoggingEvent event = (LoggingEvent) ois.readObject();
mModel.addEvent(new EventDetails(event));
}
} catch (EOFException e) {
LOG.info("Reached EOF, closing connection");
} catch (SocketException e) {
LOG.info("Caught SocketException, closing connection");
} catch (IOException e) {
LOG.warn("Got IOException, closing connection", e);
} catch (ClassNotFoundException e) {
LOG.warn("Got ClassNotFoundException, closing connection", e);
}
try {
mClient.close();
} catch (IOException e) {
LOG.warn("Error closing connection", e);
}
}
}
/** where to put the events **/
private MyTableModel mModel;
/** server for listening for connections **/
private ServerSocket mSvrSock;
/**
* Creates a new LoggingReceiver
instance.
*
* @param aModel model to place put received into
* @param aPort port to listen on
* @throws IOException if an error occurs
*/
LoggingReceiver(MyTableModel aModel, int aPort) throws IOException {
setDaemon(true);
mModel = aModel;
mSvrSock = new ServerSocket(aPort);
}
/** Listens for client connections **/
public void run() {
LOG.info("Thread started");
try {
while (true) {
LOG.debug("Waiting for a connection");
final Socket client = mSvrSock.accept();
LOG.debug("Got a connection from " +
client.getInetAddress().getHostName());
final Thread t = new Thread(new Slurper(client));
t.setDaemon(true);
t.start();
}
} catch (IOException e) {
LOG.error("Error in accepting connections, stopping.", e);
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy