当使用SLF4J记录异常时,Sonarcloud会警告“参数不足”

问题描述 投票:0回答:1

我用Java管理一个开源项目,并且在我的代码中有大约20个位置,使用以下模式记录异常(slf4j版本1.7.30)

private static final Logger logger = LoggerFactory.getLogger();

... 

try {
  // Server connection code
} catch (IOException e) {
  logger.error("Server Connection error: {}", e.getMessage());
}

或类似的

try {
  interfaces = NetworkInterface.getNetworkInterfaces(); // can return null
} catch (SocketException ex) {
  logger.error("Socket exception when retrieving interfaces: {}", ex);
}

[从今天开始,SonarCloud自动代码质量审查已开始使用规则java:S2275(带有特定消息“参数不足的消息”,Printf样式的格式字符串不应在运行时导致意外行为)标记这些。

java:S2275的评论表明可能需要一个额外的论点,但我不确定我理解为什么它是强制性的而不是可选的,以及为什么它会突然改变。

我是否可以/应该做些什么来更好地将这些异常转换为日志消息,还是误报?

((我的20个问题的声纳列表this other StackOverflow question。]

java slf4j sonarcloud exception-logging
1个回答
0
投票

这是纯粹的推测,但是每个问题都指向一条日志行,可以将其概括为:

linked here

[LOG.something(format, custom_arguments, exception) 出现在{}的格式(保留为例外的1)。

正如您所看到的count(custom_arguments) + 1,slf4j对异常进行了特殊处理,因此由于某些原因,SonarCloud可能会做同样的事情。不幸的是,没有文档。

“修复”将删除最终用于异常的linked answer,例如

{}

成为

LOG.error("boom: {}", e);
© www.soinside.com 2019 - 2024. All rights reserved.