首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从库中抛出java句柄异常,停止打印到标准输出

从库中抛出java句柄异常,停止打印到标准输出
EN

Stack Overflow用户
提问于 2018-10-23 22:53:54
回答 2查看 638关注 0票数 0

我使用的是一个java库,它创建了一个线程,线程内部有一个未捕获的异常,该异常转到stdout。

代码语言:javascript
复制
   try {
        Socket socket = server.accept();
        Thread t = new Thread(...);
        t.start();
    } catch (IOException e) {
        // Do noting
    }

这个异常最终被打印到stdout,这有意义吗?因为在测试中使用该库时,我会将错误打印到控制台。

我尝试使用如下内容重定向stdout:

代码语言:javascript
复制
PrintStream original = System.out;
    System.setOut(new PrintStream(new OutputStream() {
                public void write(int b) {
                    //DO NOTHING
                }
            }));

它不起作用..我认为这与在库中运行的线程抛出的异常有关。

如何才能禁止其进入控制台?或者将其重定向到其他地方?

编辑:

显然,打印异常是因为它们转到了System.err,我在junit类中做了类似这样的事情

static { System.setErr(new PrintStream(new OutputStream() { public void write(int b) { } })); }

并停止将异常打印到控制台。

我想要的是只禁用来自特定包的System.err。

有没有可能呢?也许使用log4j2.xml?

EN

回答 2

Stack Overflow用户

发布于 2018-10-23 23:05:36

为什么不使用log4j、slf4j等?您可以按级别配置基于包的日志,并将其写入您想要或忽略的位置。您可以在其上定义任何配置

即使是ff,你也会从一开始就覆盖stdout和stderr (在main之上),这应该会阻止它们进入控制台。

代码语言:javascript
复制
    PrintStream printStream4StoppingStdOutAndErr = new PrintStream(new OutputStream() {
        @Override
        public void write(int b) throws IOException {
            //I am stopper for any out writer
        }
    });
    System.setOut(printStream4StoppingStdOutAndErr);
    System.setErr(printStream4StoppingStdOutAndErr);
票数 0
EN

Stack Overflow用户

发布于 2018-10-23 23:11:19

打印未捕获的异常是JUnit的行为。必须在传递给线程或使用Thread.setUncaughtExceptionHandler()Runnable.run()内捕获异常

我认为您在通过JUnit运行这段代码时看到了这种行为,我这样想对吗?因为这篇文章有junit标签,但你在问题中没有提到它。

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

https://stackoverflow.com/questions/52952064

复制
相关文章

相似问题

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