在java中打开/关闭println的任何方法(详细模式)

时间:2013-08-20 00:54:17

标签: java debugging println verbose

在Java中是否有任何方法可以使println仅在请求时出现,而不是默认情况下?基本上类似于在许多程序中使用“-v”来为您提供详细模式,并提供有关正在发生的事情的信息。

例如,假设我在一个循环中有一个if语句,一个简单的println告诉我if循语的每次迭代是否为if语句计算结果为true。还有其他方法可以打开/关闭它的可见性,而不是在我不需要它时将其注释掉并在我这样做时取消注释吗?然后保存,重新编译等等。

这会让我更容易看到我的程序中发生了什么,但只有当我想要那么多信息时才会这样。正如我所说,我基本上在寻找一种方法来实现一个显示print语句的“详细”模式,而不必评论/取消注释保存,重新编译等.Java是否有这样的东西?

2 个答案:

答案 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并始终设置日志级别。