Java Log Coverage工具

时间:2013-03-06 00:33:44

标签: java log4j code-coverage

是否有任何工具或策略可用于生成(Java,log4j)的“日志覆盖”报告?与代码覆盖类似,但确保没有大型方法,类或包不记录任何内容。

编写Web服务时,我的团队不会写很多日志语句。在调试运行生产代码的实时问题时,我们总是希望有。我们不可避免地尝试在附加调试器或添加额外的日志语句的情况下重现测试环境中的错误,这可能非常困难,具体取决于所涉及的结构和互操作。

是否有人将此作为代码质量指标使用?

2 个答案:

答案 0 :(得分:1)

代码覆盖需要特殊的工具,因为您试图找出是否通过任何测试执行了一条生产代码。你要问的是更模糊一点,可能要容易得多(“这个大类的日志记录是什么?”)或者更难以实现(“我们是否记录了生产中断的方法” ?“)。

对于第一个问题,你可以很快地编写一个shell脚本来完成这项工作。例如,这是Perl中的骨架。在这里,我假设我们正在使用SLF4J并且看到导入“LoggerFactory”就足以证明它有一个记录器。

while ($filename = shift) {
    open my $in, "<$filename";
    my $loc = 0;
    my $log = "NO LOGGER";
    while (<$in>) {
        $loc++;
        if (m/import org.slf4j.LoggerFactory/) {
            $log = "has logger";
        }
    }
    print "$filename : $loc LOC $log\n";
    $total{$log} += $loc;
}
print "\n\nTOTAL LOGGED: $total{'has logger'}\nTOTAL UNLOGGED: $total{'NO LOGGER'}\n";

我可以从我的shell运行它来运行

的小项目中的所有Java文件
$ find . -name \*.java -exec perl haslog.pm {} \+

这仅适用于小型项目,而且相当脆弱,但制作更强大的版本并不是一件容易的事。

答案 1 :(得分:0)

许多日志可能是噪音,根据我的经验,我总是发现日志记录很痛苦。话虽如此,如果日志管理得当,您可以获得良好的诊断/报告。代码未正确测试的原因之一是因为生产代码中包含大量日志。开发人员倾向于在开发时添加一个日志语句以检查代码的工作原理,因此它鼓励不使用正确的断言编写测试。你需要的是许多经过良好测试的小课程。断言应该准确地告诉你测试失败的原因。

让我们在您的代码路径中说,您期望发生一些事情,这是它的主要责任(例如,创建一个注册用户/或登录用户的数据库条目),当我说它的主要职责我不是在谈论副作用发生在您的代码路径中。如果主代码路径中有错误条件,则应该在堆栈中抛出异常,您可以将其记录并转换为用户友好消息。 RuntimeExceptions在这里很不错,因为您不希望捕获这些异常,直到它一直到视图层。副作用也可以记录,因为它们就像信息/警告一样。