为了跟踪和调试我的Java
代码,我使用的是一个简单的Util
类,而不是一个完整的日志框架:
public class Util {
public static int debugLevel;
public static void info(String msg) {
// code for logfile output
// handling of unprintable characters
// etc. omitted
System.out.println(msg);
}
public static void info4(String msg) {
if (debugLevel >= 4) {
info(msg);
}
}
}
这允许紧凑的单行语句,如下所示:
info4(String.format("%16s: ", host) + Util.toHex(sidNetto));
使用debugLevel
变量,我可以控制程序的详细程度。通常,调试级别在执行开始时全局设置。但它也可以在常规水平上进行局部调整。
基本上,我在跟踪调用周围保存了重复的if (debugLevel >= DEBUG_ALL) {...}
括号。但是,无论调试级别如何,都必须在运行时准备和传递调用的参数。
我的问题:
我如何轻推编译时优化器或JVM以删除多余的跟踪调用?我正在考虑
C/C++
函数内联的行。
讨论了C#
的相关问题here。但我不知道如何将建议的答案移植到Java
。
2010年的另一个related post讨论了与我类似的方法。我想知道像ProGuard这样的第三方工具是否真的需要它来解决这样一个共同的任务。