psmith 2003/06/15 20:17:13
Added: src/java/org/apache/log4j/net SocketNode.java
Log:
sandbox impl of the already existing SocketNode.
This new version takes advantage of a new method on the (also newer)
SocketNodeEventListener interface so that listeners can be notified
when the socket has been opened, and where from.
Revision Changes Path
1.1
jakarta-log4j-sandbox/src/java/org/apache/log4j/net/SocketNode.java
Index: SocketNode.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.log4j.net;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
import org.apache.log4j.Logger;
import org.apache.log4j.plugins.Receiver;
import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.LoggingEvent;
// Contributors: Moses Hohman <[EMAIL PROTECTED]>
/**
Read [EMAIL PROTECTED] 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>For example, the socket node might decide to log events to a
local file and also resent them to a second socket node.
@author Ceki Gülcü
@since 0.8.4
*/
public class SocketNode implements Runnable {
Socket socket;
LoggerRepository hierarchy;
Receiver receiver;
SocketNodeEventListener listener;
static Logger logger = Logger.getLogger(SocketNode.class);
/**
Constructor for socket and logger repository. */
public SocketNode(Socket socket, LoggerRepository hierarchy) {
this.socket = socket;
this.hierarchy = hierarchy;
}
/**
Constructor for socket and reciever. */
public SocketNode(Socket socket, Receiver receiver) {
this.socket = socket;
this.receiver = receiver;
}
/**
Set the event listener on this node. */
public void setListener(SocketNodeEventListener _listener) {
listener = _listener;
}
public void run() {
LoggingEvent event;
Logger remoteLogger;
Exception listenerException = null;
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(
new BufferedInputStream(socket.getInputStream()));
} catch (Exception e) {
ois = null;
listenerException = e;
logger.error("Exception opening ObjectInputStream to " + socket, e);
}
if (ois != null) {
String remoteInfo = socket.getInetAddress().getHostName() + ":" +
socket.getPort();
/**
* notify the listener that the socket has been
* opened and this SocketNode is ready and waiting
*/
listener.socketOpened(remoteInfo);
try {
while(true) {
// read an event from the wire
event = (LoggingEvent) ois.readObject();
// 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 (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 = hierarchy.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);
}
}
}
} catch(java.io.EOFException e) {
logger.info("Caught java.io.EOFException closing conneciton.");
listenerException = e;
} catch(java.net.SocketException e) {
logger.info("Caught java.net.SocketException closing conneciton.");
listenerException = e;
} catch(IOException e) {
logger.info("Caught java.io.IOException: "+e);
logger.info("Closing connection.");
listenerException = e;
} catch(Exception e) {
logger.error("Unexpected exception. Closing connecition.", e);
listenerException = e;
}
}
// close the socket
try {
if (ois != null) {
ois.close();
}
} catch(Exception e) {
//logger.info("Could not close connection.", e);
}
// send event to listener, if configured
if (listener != null) {
listener.socketClosedEvent(listenerException);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]