我正在使用 self4j
用于放置记录器
LOGGER.info("Exception occurred while saving data {}", be);
但上述声明显示声纳问题 Not enough arguments.
在eclipse中使用sonarlint5.3.1
如果我更新上面的日志如下,那么它没有显示任何问题
LOGGER.info("Exception occurred while saving data", be);
或者,如果我提取任何常量文件中的日志字符串,那么它也可以正常工作
private static final String LOG_STR = "Exception occurred while saving data {}";
LOGGER.info(LOG_STR , be);
为什么它在不同的场景中表现不同?
1条答案
按热度按时间zour9fqk1#
这篇文章有两个问题。
为什么带有{}的消息没有足够的参数。?
slf4j logger类对每个日志方法都有一些变体:
信息(java.lang.string、java.lang.object)
信息(java.lang.string,java.lang.object…)
信息(java.lang.string、java.lang.throwable)
第一个和第二个变体接收一条消息和参数,这些消息和参数将被注入其中。第三个接受静态消息,因为异常的处理方式不同。我相信
be
是个例外。这意味着:执行第三个不支持
{}
. 如果您只想显示异常消息并隐藏堆栈跟踪(当您使用第三个变量时,默认情况下会记录该跟踪)-您应该调用toString()
在be
.为什么常量代码不产生错误?
我相信规则中有一个bug,你应该在sonarsource社区报告它。