如何使用SLF4J使用占位符记录异常和消息


85

使用SLF4J记录错误消息和异常的正确方法是什么?

我已经尝试过这样做,但从未打印异常堆栈跟踪:

logger.error("Unable to parse data {}", inputMessage, e);

在这种情况下,我想填充{}inputMessage和退出异常堆栈跟踪。

我可以看到的唯一方法是这样做:

logger.error("Unable to parse data " + inputMessage, e);

不好看


您的拳头logger.error行在slf4j 1.7.25版中可以正常运行。
kiml42

Answers:


131

从SLF4J 1.6版开始,SLF4J将按您的预期解释最后一个参数,即作为例外。您必须使用旧版本的SLF4J API。


7
Javadoc中对此有描述吗?我希望在这里找到类似的信息: slf4j.org/apidocs/org/slf4j/Logger.html
Scot

2
我相信您,但是像@Scot一样,我希望这种行为得到记录。
斯蒂芬

4
苏格兰人@Stephan -前述方式行为似乎在他们的常见问题被记录在这里
Priidu Neemre

8
这就像一个保密的秘密。感谢您指出。我的后续问题是,为什么他们会隐藏在var-arg中可行的事实?他们为什么不能创建一个新的重载方法,该方法采用Throwable并在之后具有var-arg?有擦除问题吗?这是其他库中将异常作为最后一个参数传入的标准吗?
gaoagong '16

7
(自?)(在FAQ中)对此进行了记录:slf4j.org/faq.html#paramException。我同意应该更清楚地记录此功能。
Stephan202
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.