在控制台输出调试信息

15

我正在开发一个使用 swing 用户界面的 Java 应用程序。它会要求用户通过填写表单来指定一些设置,然后处理并在 ./output/ 目录下生成一些文件。

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

我需要在完成开发后删除所有这些控制台输出吗?

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

也许我应该只使用 JUnit 测试来进行调试?但我刚刚开始接触,对其功能还不够了解。


2
Log4J 2旨在帮助您实现日志管理,它具有许多功能,您可以在该链接中查看 :-) - nIcE cOw
在某些情况下,Java日志记录可能更好。 - Juraj Kostolanský
@Siorus,你能简要解释一下吗?你所说的“Java logging”是什么意思? - Edward Ruchevits
1
如果您需要像数据库连接的启动/停止/查询,捕获的异常等信息,您可以使用此链接:http://docs.oracle.com/javase/6/docs/technotes/guides/logging/overview.html。 - Juraj Kostolanský
2个回答

20

如果你不打算使用专门的调试框架,那么这可能很容易:

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

Debugger类只是封装了println调用(像这样):

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

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

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


1
谢谢,我会尝试一些调试框架的,就像你提到的那样。 :) - Edward Ruchevits
我尝试过这个,但它显示“无法从静态内容访问非静态方法Debugger”。 - JFreeman

9

为了使客户端更加简洁,对Debugger类进行了小幅改进:

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

然后客户端只需要一行代码:
Debugger.log("....")

1
在我看来,这不是一个更好的解决方案。通常,调试消息字符串需要格式化,即使在禁用调试时也会占用CPU时间。在log()之外检查调试是否启用可以节省这些资源(分支仍然会发生)。或者,您可以编写一个包装字符串格式化的log()方法。 - Yuval

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接