【发布时间】:2021-01-24 22:23:46
【问题描述】:
在我们的代码中,我们一次又一次地遇到有人在使用记录器和 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 来检查 ' 的使用,那就太好了String.format()-方法的第一个字符串参数中的 %s'(或缺少 '{}')。有这样的可能吗?
【问题讨论】:
标签: archunit