在我们的代码中,我们一次又一次地遇到一个问题,即在使用 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 参数中。这样的事情可能吗?