在 Java 中,如何重定向 System.err 以进行特定方法调用?



假设我在Java中有一些方法method(),它调用了一系列对应于堆栈跟踪结构的方法。可能是这些"子方法"之一调用打印到 System.err/stderr。有没有办法阻止与该方法相关的所有打印?我找到了这个页面,它解释了如何通过暂时完全重定向System.err来做到这一点,但我担心这可能会导致其他错误(我确实想要跟踪(不出现在控制台中。

您可以尝试在方法调用之前存储原始的 PrintStream 和 Overhold,并在调用后恢复其

public static void main(String[] args) {
// Before methods' invocation
final PrintStream orgErr = System.err;
System.setErr(new PrintStream(new OutputStream() {
@Override
public void write(int b) throws IOException {
}
}));
callMethod();
// After methods' invocation
System.setErr(orgErr);
}
static void callMethod() {
try {
throw new RuntimeException("failed");
} catch (RuntimeException e) {
e.printStackTrace();
}
}

除非您正在运行多个线程,否则使用您链接到的帖子中的方法应该可以工作(除了 System.setErr 而不是 System.setOut

public void method(){
//This submethod will print errors
submethod1();
PrintStream original = System.err;
System.setErr(new PrintStream(new OutputStream(){
public void write(int i){ }
}));
//This submethod will NOT print errors
submethod2();
System.setErr(original);
//This submethod will print errors
submethod3();
}

只要在调用任何想要错误的子方法之前设置回原始方法,就应该没问题

相关内容

  • 没有找到相关文章

最新更新