archunit - 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,当前版本为 0.16.0,不分析方法调用的参数值。
然而,声纳规则“应该正确使用 Printf 样式的格式字符串”可能会捕获这些错误。
推荐阅读
- python - 当前用户的 Django 用户配置文件模型表单编辑
- mips - 不同寄存器上的 R_MIPS_HI16/R_MIPS_LO16 对
- azure - 使用 ACR 和托管标识配置 Azure WebApp
- latex - “报告”类的两列参考书目
- python - Python OpenGL如何正确渲染离屏
- c# - 锁定的 webBrowser 表单
- amazon-web-services - 从 terraform 中的安全组名称中提取安全组 ID
- java - 如何在春季使用@Transactional
- angular - 仅在向请求添加自定义标头时出现离子 CORS 问题(Spring Boot 后端)
- python - 将日期转换为日期