繁体   English   中英

Java Log Coverage工具

[英]Java Log Coverage tool

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

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

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

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

对于第一个问题,你可以很快地编写一个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 {} \+

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM