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

Jon*_*els 27 java sonarqube

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

 log.info("message");
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Mic*_*eam 34

这是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,这意味着该问题已得到修复.将版本更新到最新发布的版本应该可以解决问题.

  • @JayR.确实.SonarLint for Eclipse 3.5在独立模式下具有版本5.1.0.13090,没有修复.预计将在一个月内发布一个新的Eclipse版本,它将包含最新的Java分析器,包括此修复程序. (4认同)

小智 9

不合规的代码示例

logger.info("Query: " , query);
LOGGER.info("Query: {0}", query);
// issue: String contains no format specifiers
LOGGER.info("Query: {0}", query);
// issue: String contains no format specifiers
Run Code Online (Sandbox Code Playgroud)

合规解决方案

LOGGER.info("Query: {}", query);
Run Code Online (Sandbox Code Playgroud)