2012-08-12 113 views
7

我在做一个Java应用程序,它将使用swing用户界面。它会要求用户指定一些设置,填写表单,然后处理它们并在./output/目录中生成一些文件。在控制台输出调试信息

在开发过程中,我想用控制台输出一些技术信息,使用System.out.println()方法。

当我完成开发时,是否需要删除所有这些控制台输出?

如果是,在开发过程中显示调试信息以便在生产之前轻松移除它的最佳方式是什么?

也许我应该只使用JUnit测试用于调试目的?我刚刚开始使用它,所以我对其功能有着模糊的概念。

+2

[Log4J的2](HTTP:/ /logging.apache.org/log4j/2.x/)是为了帮助你,它提供了许多功能,你可以在这个链接中看到:-) – 2012-08-12 16:00:27

+0

在某些情况下,Java日志记录可能会更好 – 2012-08-12 20:09:05

+0

@Siorus你能简单解释一下吗?你的意思是'Java日志记录'? – 2012-08-12 20:10:01

回答

13

如果你不打算使用一个专门的调试框架可能是那么容易,因为:

if (Debugger.isEnabled()) 
    Debugger.log("message here"); 

调试器类只是封装的println调用(像这样):

public class Debugger{ 
    public static boolean isEnabled(){ 
     return true; 
    } 

    public static void log(Object o){ 
     System.out.println(o.toString()); 
    } 
} 

通过这种方式,当您想要进入生产环境时,或者您可以通过更改类中的一行来修改调试的行为(或禁用它)。

+1

谢谢,如你所说,我可能会更好地尝试一些调试框架。 :) – 2012-08-12 16:25:04

6

小的改进到调试器类来使客户端稍微清洁器:

public static void log(Object o){ 
    if(Debugger.isEnabled()) { 
     System.out.println(o.toString()); 
    }   
} 

然后客户端将只需要一个行:

Debugger.log("....") 
+0

在我看来,这不是一个更好的解决方案。通常调试消息字符串需要格式化,即使在禁用调试时也需要CPU时间。在调用'log()'之外检查调试是否可以保存(无论如何都会发生分支)。或者,你可以有一个包含字符串格式的'log()'方法。 – Yuval 2016-10-14 22:50:46

相关问题