我希望能够在编写生产版本时编译出我的调试代码(详细日志记录等),但编译进行调试。
据我所知,如果我对常量进行分支,编译器将删除分支,这就是我想要的。所以我有一节课:
class Debug {
public static final boolean ON=true;
}
我的调试代码在这样的分支内:
if (Debug.ON) {
// Verbose / expensive logging goes here
}
我的问题是,如何在编译时将Debug.ON设置为true或false,而不是实际编辑源文件?
编辑:请注意,我并不关心控制是否出现日志输出 - 我正在使用java.util.Logging,它可以解决这个问题。我更关心编译任何准备日志消息的昂贵代码,这些代码永远不会得到输出,或者进行生产模式中不需要的测量。
我想我可以有一个蚂蚁目标,从模板或其他东西制作源文件,但它似乎是一个黑客。在C ++中,我能够定义一个预处理器符号,我可以用-D传入它 - 是否有任何Java等价物?还是其他一些更好的方式?
答案 0 :(得分:1)
你可以做的是有两个Jars或类文件。
一个包含Debug类,其中ON = true,另一个ON = false。
然后根据您想要的调试状态进行编译时,在类/ jar文件或DEBUG关闭类/ jar文件中包含DEBUG。
答案 1 :(得分:0)
对于java.util.logging
,您可以使用isLoggable
。虽然这不是编译时检查,但与记录昂贵的计算资料相比,它应该相当便宜。