Sonarqube,“字符串不包含格式说明符”时记录常量字符串消息

SonarQube抱怨“ 字符串不包含格式说明符” 。 当使用org.slf4j.Logger ,特别是方法“ public void debug(String msg) ”。 例如

  log.info("message"); 

它指的是这条规则: https : //wiki.sei.cmu.edu/confluence/display/c/FIO47-C.+Use+valid+format+strings

但是,在此规则中,我们可以找到以下引用:

每个转换规范由%字符引入(按顺序)by

零个或多个标志(以任何顺序),它们修改转换规范的含义

是我错过了什么,还是这个规则没有得到很好的实施? 有这方面的经验吗?

这是SonarJava 5.1引入的已知问题。 您可以安全地将此问题视为误报(FP)和/或忽略它。 处理JIRA票SONARJAVA-2633时已经修复。

该修复程序已于2018年2月16日发布的SonarJava分析器5.1.1版本中提供(需要SonarQube LTS 6.7或更高版本)。

SonarLint独立用户的更新

对于使用独立版本(未连接到任何SonarQube实例)的SonarLint用户,您可能仍会根据所使用的版本观察到该问题。 如果您正在使用:

  • SonarLint for Eclipse 3.5:它包含SonarJava的5.1.0.13090版本,因此您仍然可以在代码中观察FP。 下一个版本将使用更新版本的SonarJava,从而解决问题。 预计下一版本将于5月底/ 2018年6月初推出。
  • 用于IntelliJ 3.4的SonarLint (2018年5月9日发布):它包括SonarJava 5.3.0.13828 ,这意味着该问题已得到修复。 将版本更新到最新发布的版本应该可以解决问题。