我想在我的代码库中注释掉所有对API的调用(在我的例子中是java.util.Logging)。有一个很好的图书馆可以轻松完成吗? 我尝试过Eclipse ASTParser,但这与Eclipse有关。我现在正在努力研究PMD的解析器。我还没有看过它,但Jackpot可以这样做吗?还有其他建议吗?
答案 0 :(得分:4)
我知道这不是您要求的,但我只想提醒您注意您可以在配置文件中更改日志OFF。
答案 1 :(得分:2)
如果你想对此发表评论:
Log.doLog("Here is a" /* With a block comment to make it hard */
+ " multiline log statement"
); doSomethingEssential();
然后你会有一个比较棘手的时间,因为你需要在某种程度上解析代码以了解评论的位置。即你希望能够做到这一点:
// Log.doLog("Here is a" /* With a block comment to make it hard */
// + " multiline log statement"
// ); // Line break inserted here
doSomethingEssential();
这样做要轻松得多:
if (false) Log.doLog("Here is a" /* With a block comment to make it hard */
+ " multiline log statement"
);
'if false'部分最终被编译器优化,而Log语句不会进入最终的.class文件。
这样你需要的只是构建脚本中的搜索/替换步骤,它取代了所有出现的
"Log.doLog("
使用
"if (false) Log.doLog(" or
"if (true) Log.doLog("
不依赖于棘手的代码解析。
答案 2 :(得分:0)
sed?只需用注释行替换即可。您需要考虑匹配正则表达式以捕获多行调用。
答案 3 :(得分:0)
您可以使用slf4j的jul-to-slf4j模块将所有java.util.logging调用重定向到slf4j,然后您可以选择slf4j-nop模块来忽略所有日志记录语句。
这样做,还是你真的需要摆脱这些源线?
答案 4 :(得分:0)
使用工具注释掉或删除所有日志代码可能不是一个好主意。
您可能没有注意到副作用代码:
while ( x > 5)
{
// some code here
Logger.global.finest( "X is now bigger: " + (x++) );
}
这是一个非常明显的例子,但是对于方法调用或记录器调用中的某些内容,它可能非常微妙。
关闭日志记录输出或手动完成整个事情可能更安全......
答案 5 :(得分:0)
如果您希望避免评估参数,正如您在评论中所说,那么我假设您有如下调用:
logger.log("Expensive toString() operation on " + this);
你要禁用它?
如果是这种情况,并且它分散在您的代码中,我会使用类似AspectJ的内容来围绕上述所有实例:
if (loggingEnabled) {
...
}
并将loggingEnabled
标志设置为false。