在Java中有没有任何方法可以使println只在请求时显示,而不是默认情况下显示?基本上类似于在许多程序中使用"-v"来提供详细模式,并提供有关正在发生的事情的信息。
例如,假设我在循环中有一个if语句,以及一个简单的println,它告诉我对于循环的每个迭代,if语句是否计算为true。除了在我不需要的时候把它注释掉,在我需要的时候取消注释之外,还有其他方法可以打开/关闭它的可见性吗?然后保存、重新编译等等。
这会让我更容易看到我的程序中发生了什么,但只有当我想要那么多信息的时候。正如我所说,我基本上是在寻找一种实现"详细"模式的方法,该模式显示打印语句,而不必对保存、重新编译等进行注释/取消注释。Java有这样的功能吗?
您的最佳选择是使用某种适当的记录器(例如log4j)。
如果这不可能,您可以使用以下方法"消费"stdout和stderr。。。
PrintStream nullPrintStream = new PrintStream(new OutputStream() {
@Override
public void write(int b) throws IOException {
}
});
System.setErr(nullPrintStream);
System.setOut(nullPrintStream);
这将阻止所有输出开始打印。如果更合适的话,您可以使用代理进程(使用封装在代理PrintStream
中的当前stdout)来过滤内容。。。
不能使用标志关闭任何sysout。您要查找的功能由loggers
(如lo4j
)提供。使用记录器,您可以使用ConsoleAppender
并始终设置日志级别。