package org.ovirt.engine.api.restapi.logging; import java.io.IOException; import java.io.OutputStream; import org.ovirt.engine.core.compat.LogCompat; public class LoggingOutputStream extends OutputStream { protected OutputStream wrapped; protected LogCompat log; protected StringBuilder line; protected LoggingOutputStream(OutputStream wrapped, LogCompat log) { this.wrapped = wrapped; this.log = log; line = new StringBuilder(); } @Override public void write(int c) throws IOException { line.append((char)c); if (c == '\n') { dump(); } wrapped.write(c); } @Override public void write(byte[] bytes) throws IOException { write(bytes, 0, bytes.length); } @Override public void write(byte[] bytes, int offset, int length) throws IOException { String b = new String(bytes, offset, length); line.append(b); if (b.indexOf('\n') != -1) { dump(); } wrapped.write(bytes, offset, length); } @Override public void flush() throws IOException { dump(); wrapped.flush(); } @Override public void close() throws IOException { dump(); // wrapped stream will be independently closed } protected void dump() { log(line.toString()); line = new StringBuilder(); } protected void log(String line) { log.debug(line); } }