package org.ovirt.engine.api.restapi.logging; import java.io.IOException; import java.io.InputStream; import org.ovirt.engine.core.compat.LogCompat; public class LoggingInputStream extends InputStream { protected InputStream wrapped; protected LogCompat log; protected StringBuilder line; protected LoggingInputStream(InputStream wrapped, LogCompat log) { this.wrapped = wrapped; this.log = log; line = new StringBuilder(); } @Override public int available() throws IOException { return wrapped.available(); } @Override public void close() throws IOException { wrapped.close(); } @Override public void mark(int readlimit) { wrapped.mark(readlimit); } @Override public boolean markSupported() { return wrapped.markSupported(); } @Override public synchronized int read(byte[] bytes) throws IOException { return read(bytes, 0, bytes.length); } @Override public synchronized int read(byte[] bytes, int offset, int length) throws IOException { int count = wrapped.read(bytes, offset, length); if (count > 0) { String b = new String(bytes, offset, count); line.append(b); if (b.indexOf('\n') != -1) { dump(); } } return count; } @Override public synchronized int read() throws IOException { int c = wrapped.read(); line.append((char)c); if (c == '\n') { dump(); } return c; } @Override public void reset() throws IOException { wrapped.reset(); } @Override public long skip(long n) throws IOException { return wrapped.skip(n); } protected void dump() { log.debug(line.toString()); line = new StringBuilder(); } }