假设我在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();
}
只要在调用任何想要错误的子方法之前设置回原始方法,就应该没问题