繁体   English   中英

将System.out加倍

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM