[Sonarqube] [Java]应该正确使用Printf样式的格式字符串

时间:2018-04-25 11:43:37

标签: sonarqube

似乎有一个新规则可用于最新版本。 我有几个问题报告为" Printf样式的格式字符串应该正确使用(squid:S3457)"

我不理解my case中的说明和错误:

LOGGER.info("Checking for client process pid: {0}", parentProcessId);
// issue: String contains no format specifiers

在规则说明中我们有:

java.util.Logger logger;
logger.log(java.util.logging.Level.SEVERE, "Result {0}.", myObject.toString()); // Noncompliant; no need to call toString() on objects
logger.log(java.util.logging.Level.SEVERE, "Result.", new Exception()); // compliant, parameter is an exception
logger.log(java.util.logging.Level.SEVERE, "Result '{0}'", 14); // Noncompliant {{String contains no format specifiers.}}

java.util.Logger logger;
logger.log(java.util.logging.Level.SEVERE, "Result {0}.", myObject);
logger.log(java.util.logging.Level.SEVERE, "Result {0}'", 14);

与我的案件有何不同? 你能帮我理解写它的正确方法吗?

2 个答案:

答案 0 :(得分:4)

了解我的错误,使用slf4j logger,{}需要使用而不是{0}

答案 1 :(得分:1)

不兼容的代码示例

logger.info(“ Query:”,query);

LOGGER.info(“查询:{0}”,查询); //问题:字符串不包含格式说明符

兼容解决方案

LOGGER.info(“查询:{}”,查询);