【问题标题】:Sonarqube, "String contains no format specifiers" when logging constant String messageSonarqube,记录常量字符串消息时“字符串不包含格式说明符”
【发布时间】:2018-07-18 22:03:15
【问题描述】:

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

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

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

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

是我遗漏了什么,还是这条规则没有很好地执行?有这方面的经验吗?

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

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

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

    SonarLint 独立用户更新

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

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

    【讨论】:

    • 感谢您的回答和链接!
    • 嗨,谢谢你的信息,你有什么想法,如果只有记录器受到影响,或者它更广泛,每种记录都会引发这种问题?谢谢..我没有在参考链接上找到信息
    • 只有来自org.slf4j.Logger 的记录器应该受到影响。
    • 我刚刚问了一个标记为与此处重复的问题。我正在运行 6.7.1 LTS,我仍然看到这个,还有org.slf4j.Logger。对于遇到此问题的任何人:您应该升级到包含修复程序的 6.7.2。
    • @JayR。确实。 SonarLint for Eclipse 3.5 的版本为 5.1.0.13090 处于独立模式,没有修复。预计一个月内将发布一个新的 Eclipse 版本,其中将包含最新的 Java 分析器,包括此修复程序。
    【解决方案2】:

    不合规代码示例

    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
    

    合规解决方案

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

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2010-11-10
      • 2013-01-20
      • 2014-03-12
      相关资源
      最近更新 更多