Java Log Coverage工具

Cor*_*all 5 java log4j code-coverage

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

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

有没有人使用它作为代码质量指标?

Nat*_*rot 2

代码覆盖率需要特殊的检测,因为您试图找出一段生产代码是否由任何测试执行。您要问的问题有点模糊,可能更容易(“是否为这个大类进行了任何日志记录?”)或更困难到不可能的程度(“我们是否记录了将在生产中中断的方法” ?”)。

对于第一个问题,您可以很快地编写一个 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";
Run Code Online (Sandbox Code Playgroud)

我可以从我的 shell 运行它来运行一个小项目中的所有 Java 文件

$ find . -name \*.java -exec perl haslog.pm {} \+
Run Code Online (Sandbox Code Playgroud)

这仅适用于小型项目,而且相当脆弱,但制作一个更强大的版本并不需要大量工作。