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