【问题标题】:Can ArchUnit check for certain string patterns in method calls?ArchUnit 可以在方法调用中检查某些字符串模式吗?
【发布时间】: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


    【解决方案1】:

    ArchUnit currently in version0.16.0 不分析方法调用的参数值。

    sonar rule "Printf-style format strings should be used correctly" 可能会捕获这些错误。

    【讨论】:

    • 感谢您的回复和提示。好主意!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多