我正在使用slf4j 1.7.x用于登录我们的 Java 项目。 Logger接口(interface)有多种方法可以在错误级别进行日志记录,例如这两个:
void error(String msg, Throwable t)
void error(String format, Object... arguments)
我的问题是,如果我想在 catch block 中记录异常,这两个中哪一个被认为更好,以及哪些信息记录在哪一个中,如果我有如下信息?
try {
// Code to call sdk for ABC Service
} catch (AbcServiceException | CredentialException | IOException e) {
logger.error("Error during getting information from Abc", e);
//OR
logger.error("Error during getting information from Abc {} {} ", e.getMessage(), e.getCause());
return null; // Or return some default value
}
最佳答案
这是一个固执己见的答案,但我更喜欢可抛出的消耗 API,因为它提供了多级堆栈跟踪,并且似乎是项目中最常用的 API。
还请记住,slf4j 1.6 或更高版本可以检测 Object[]
中的最后一个参数是否为异常,也很容易使用异常进行参数化日志记录 - 请参阅 http://www.slf4j.org/faq.html#paramException举个例子。
最后,只需编写 LOG.error("blah blah {} {}", arg1, arg2, exception)
对我来说效果很好。
关于java - slf4j 日志记录 - 两种错误日志记录方法之间的差异(带和不带 Throwable),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66537089/