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 ; 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 ) ; } }
Deserialize events from socket until interrupted .