首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加倍System.out

加倍System.out
EN

Stack Overflow用户
提问于 2012-10-29 12:24:14
回答 1查看 71关注 0票数 0

我想将System.out消息写入另一个OutputStream,但我仍然希望有标准输出。

我在这个类似的问题上找到了答案,复制和重定向System.err流

简而言之,您需要做的是定义一个可以复制其输出的PrintStream,使用以下方法分配:

代码语言:javascript
复制
System.setErr(doubleLoggingPrintStream)

到目前为止,我就是这样做的:

代码语言:javascript
复制
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) {}
            }
        }
    }
}

这只是一个草案,但这是一个好办法吗?我不知道是否有更好的解决方案,所以我正在寻找确认,想法和建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-29 12:29:39

我认为有一个Apache库可以做到这一点(TeeOutputStream,谢谢@Thilo),但在我看来,您的实现很好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13121582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档