关于Sonar缺失日志参数检测规则的问询:该规则去向何方?
关于Sonar日志缺失参数检测规则的说明
Yep, you're absolutely right—there's definitely a Sonar rule that catches mismatched log placeholders and arguments, exactly like the issue in your sample code!
规则详情
- 规则ID:
java:S2629 - 规则名称: Logging arguments should match format string
- 检测场景: 它会扫描各类日志语句(比如
LOG.info()、LOG.error()等),检查格式化字符串中的占位符(比如{})数量和实际传入的参数数量是否匹配。像你给出的示例:
这里3个占位符却只传了2个参数,正好会触发这个规则的告警。LOG.info( "Sonar issue {}{}{}", "Missing", "1 parameter" );
当前状态
这个规则目前是SonarQube Java规则集中的活跃规则,一直处于维护状态。如果你之前用过但现在找不到了,可能是这几种情况:
- SonarQube版本更新后,规则的名称或描述有微调,但核心检测逻辑没变;
- 你的SonarQube实例中没有启用这个规则(可以在规则库中搜索
java:S2629来找到并启用它); - 如果你用的是SonarLint,确保插件是最新版本,且该规则已开启。
另外,这个规则还会覆盖其他类似问题:比如参数数量多于占位符、参数类型和占位符不兼容(比如用%d却传入字符串)等日志格式化错误。
内容的提问来源于stack exchange,提问作者MelleD
相关产品推荐
相关产品推荐

