我用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。]
这是纯粹的推测,但是每个问题都指向一条日志行,可以将其概括为:
linked here
[LOG.something(format, custom_arguments, exception)
出现在{}
的格式(保留为例外的1)。
正如您所看到的count(custom_arguments) + 1
,slf4j对异常进行了特殊处理,因此由于某些原因,SonarCloud可能会做同样的事情。不幸的是,没有文档。
“修复”将删除最终用于异常的linked answer,例如
{}
成为
LOG.error("boom: {}", e);