I was in the need to redirect the RMI logging output to log4j and created a
small adapter that handles that, which is an OutputStream that transact to
the Log4J loggers upon reception of new line character, flush or close.
Usage;
StreamAdapter sa = new StreamAdapter( logger , level );
RemoteServer.setLog( sa );
This is released as BeerWare;
"This license grant you to use the software in any way you want, no
limitations, provided;
a) You hold the author unresponsible for any and all effects.
b) Drink a beer to salute the author.
"
;o)
package com.ewarna.lz;
import java.io.OutputStream;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.Priority;
/** Adapter for Streams to be directed to log4j Loggers.
*
* <p>This project is using this to redirect the
* RMI Exception trace to Logger outputs, instead of the
* System.out/System.err (whichever it may be). However,
* this adapter is versatile enough to make any kind
* of OutputStream content to go to the Logger system.</p>
*
**/
public class StreamAdapter extends OutputStream
{
private static final char NEWLINE;
private Logger m_Logger;
private Priority m_Priority;
private StringBuffer m_Message;
static
{
NEWLINE = System.getProperty( "line.separator" ).charAt(0);
}
/** Creates the default StreamAdapter.
*<p>Convinience constructor for
* <code>StreamAdapter( Logger.getLogger( StreamAdapter.class ),
* Level.INFO );</code>
**/
public StreamAdapter()
{
this( Logger.getLogger( StreamAdapter.class ), Level.ERROR );
}
/** Creates a StreamAdapter connecting to the given logger.
*<p>Convinience constructor for
* <code>StreamAdapter( logger,
* Level.INFO );</code>
**/
public StreamAdapter( Logger logger )
{
this( logger, Level.INFO );
}
/** Creates a StreamAdapter connecting to a particular
* logger with a message of a particular priority/level.
*/
public StreamAdapter( Logger logger, Priority priority )
{
m_Logger = logger;
m_Priority = priority;
m_Message = new StringBuffer(200);
}
public void write( int b )
{
if( m_Logger != null && b == NEWLINE )
flush();
else
m_Message.append( (char) b );
}
/** Flushes the outputstream and sends the buffered bytes
* to its destination.
* <p> This causes the call to the <code>Logger.log</code>
* method, and will hence constitute a transaction in that
* system. This method is called whenever a new line character
* is encountered in the write stream, and upon close.
**/
public void flush()
{
if( m_Message.length() > 0 )
{
m_Logger.log( m_Priority, m_Message.toString() );
m_Message.setLength(0);
}
}
public void close()
{
flush();
}
public Logger getLogger()
{
return m_Logger;
}
public void setLogger( Logger logger )
{
m_Logger = logger;
}
public void setPriority( Priority priority )
{
m_Priority = priority;
}
public Priority getPriority()
{
return m_Priority;
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>