slf4j logging -两种错误记录方法(带和不带Throwable)之间的区别



我使用slf4j 1.7。x用于登录我们的Java项目。Logger接口有多个方法来记录ERROR级别的日志,例如以下两个:

void error​(String msg, Throwable t)
void error​(String format, Object... arguments)

我的问题是,如果我想在catch块中记录一个异常,这两个块中哪一个被认为是更好的,哪一个记录了什么信息,如果我有下面的情况?

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
}

这是一个固执己见的答案,但我更喜欢throwableconsuming API,因为它提供了多级堆栈跟踪,并且似乎是项目中使用最多的API。

还请记住,slf4j 1.6或更高版本可以检测Object[]中的最后一个参数是否为异常,也很容易使用异常进行参数化日志记录—参见http://www.slf4j.org/faq.html#paramException示例。

最后,只写LOG.error("blah blah {} {}", arg1, arg2, exception)对我来说已经很好了。

最新更新