我使用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)
对我来说已经很好了。