package org.jboss.logging.util;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
public class LoggerWriter
extends PrintWriter
{
private Logger logger;
private Level level;
private boolean inWrite;
private boolean issuedWarning;
public LoggerWriter( final Logger logger ) {
this( logger, Level.INFO );
}
public LoggerWriter( final Logger logger,
final Level level ) {
super( new InternalLoggerWriter( logger, level ), true );
}
static class InternalLoggerWriter extends Writer {
private Logger logger;
private Level level;
private boolean closed;
public InternalLoggerWriter( final Logger logger, final Level level ) {
lock = logger;
this.logger = logger;
this.level = level;
}
public void write( char[] cbuf, int off, int len )
throws IOException {
if ( closed ) {
throw new IOException( "Called write on closed Writer" );
}
while ( len > 0 && ( cbuf[len - 1] == '\n' || cbuf[len - 1] == '\r' ) ) {
len--;
}
if ( len > 0 ) {
logger.log( level, String.copyValueOf( cbuf, off, len ) );
}
}
public void flush()
throws IOException {
if ( closed ) {
throw new IOException( "Called flush on closed Writer" );
}
}
public void close() {
closed = true;
}
}
}