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

Java Sonarqube,“;字符串不包含格式说明符";记录常量字符串消息时,java,sonarqube,Java,Sonarqube,SonarQube抱怨“字符串不包含格式说明符。”当使用org.slf4j.Logger时,特别是使用方法“public void debug(String msg)”。比如说 log.info("message"); 它指的是这条规则: 但是,在此规则中,我们可以找到以下报价: 每个转换规范都由%字符引入 接着(按顺序)是 零个或多个标志(以任何顺序),用于修改 转换规范 是我错过了什么,还是这条规则没有得到很好的执行?这是Java 5.1引入的一个已知问题。您可以安全地将此问题视为假阳性

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

 log.info("message");
它指的是这条规则:

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

每个转换规范都由%字符引入 接着(按顺序)是

零个或多个标志(以任何顺序),用于修改 转换规范


是我错过了什么,还是这条规则没有得到很好的执行?这是Java 5.1引入的一个已知问题。您可以安全地将此问题视为假阳性(FP)和/或忽略它。在处理JIRA票据时,它已经被修复

该修复程序与SonarJava analyzer的版本5.1.1一起交付,于2018年2月16日发布(需要SonarQube LTS 6.7或更高版本)

Sonarint独立用户更新

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

  • SonarLint for Eclipse3.5:它包括SonarJava的版本5.1.0.13090,因此您仍然可以在代码中观察FP。下一个版本将使用SonarJava的最新版本,因此解决了这个问题。下一版本预计于2018年5月底/6月初发布
  • 用于IntelliJ 3.4的SonarLint(于2018年5月9日发布):它包括SonarJava5.3.0.13828,这意味着问题已经解决。将您的版本更新到最新发布的版本将解决此问题

不合规代码示例

logger.info(“查询:”,查询);
info(“查询:{0}”,查询);
//问题:字符串不包含格式说明符
info(“查询:{0}”,查询);
//问题:字符串不包含格式说明符
兼容解决方案

LOGGER.info("Query: {}", query);

谢谢你的回答和链接!您好,感谢您提供的信息,您是否知道,如果只有logger受到影响,或者它的影响范围更广,并且每种类型的日志记录都会引发此类问题?谢谢我在
org.slf4j.logger
的ref linkOnly logger中没有找到信息。我刚刚问了一个问题,标记为此处问题的重复。我正在运行6.7.1 LTS,我仍然看到了这一点,还有
org.slf4j.Logger
。对于遇到此问题的任何人:您应该升级到6.7.2,其中包含修复程序。@JayR。的确Sonarint for Eclipse 3.5在独立模式下有5.1.0.13090版,但没有修复程序。新的Eclipse版本预计将在一个月内发布,其中将包含最新的Java analyzer,包括此修复程序。