[英]Doubling System.out
我想将System.out
消息写到另一个OutputStream
,但是我仍然想拥有标准输出。
我在类似的问题复制和重定向System.err Stream上找到了答案:
简而言之,您需要定义一个可以复制其输出的PrintStream,并使用以下方法进行分配:
System.setErr(doubleLoggingPrintStream)
这是我到目前为止所做的:
public class DoublerPrintStream extends PrintStream {
private OutputStream forwarder;
public DoublerPrintStream(OutputStream target, OutputStream forward) {
super(target, true);
this.forwarder = forward;
}
@Override
public void write(byte[] b) throws IOException {
try {
synchronized (this) {
super.write(b);
forwarder.write(b);
forwarder.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
}
}
@Override
public void write(byte[] buf, int off, int len) {
try {
synchronized (this) {
super.write(buf, off, len);
forwarder.write(buf, off, len);
forwarder.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
}
}
@Override
public void write(int b) {
try {
synchronized (this) {
super.write(b);
forwarder.write(b);
forwarder.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
}
}
@Override
public void flush() {
super.flush();
try { forwarder.flush(); } catch (IOException e) { }
}
@Override
public void close() {
super.close();
if (forwarder != null) {
try {
forwarder.close();
} catch (Exception e) {}
}
}
}
}
这只是草稿,但这是一个好方法吗? 我对是否有更好的解决方案一无所知,因此我正在寻找确认,想法和建议。
我认为有一个Apache库可以做到这一点( TeeOutputStream ,感谢@Thilo),但是您的实现对我来说很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.