首页 > 解决方案 > ArchUnit 可以在方法调用中检查某些字符串模式吗?

问题描述

在我们的代码中,我们一次又一次地遇到一个问题,即在使用 logger 和 String.format(...) 方法之间切换时,有人忘记调整占位符的使用。

对于日志语句,必须使用“{}”作为占位符,如下所示:

logger.info("File {} successfully opened: {} bytes read, {} objects created", file, nrBytes, nrObjects); 

但是,当使用 String.format(...) 编写消息时,必须使用 '%s' 作为字符串的占位符,并且语句必须阅读:

logger.info(String.format("File %s successfully opened: %s bytes read, %s objects created", file, nrBytes, nrObjects)); 

在记录错误时,通常使用第二种形式,其中第二个参数是要记录的 Throwable。

人们经常忘记这些细节,然后我们最终得到错误的日志语句,输出不合理。

我知道并同意这绝对不是架构问题,而是一个简单的编程错误,但如果可以(ab-)使用 ArchUnit 来检查 '%s' 的使用(或缺少 '{ }') 在String.format()-method 的第一个 String 参数中。这样的事情可能吗?

标签: archunit

解决方案


ArchUnit,当前版本为 0.16.0,不分析方法调用的参数

然而,声纳规则“应该正确使用 Printf 样式的格式字符串”可能会捕获这些错误。


推荐阅读