java - slf4j 日志记录 - 两种错误日志记录方法之间的差异(带和不带 Throwable)

标签 java exception logging slf4j error-logging

我正在使用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/

相关文章:

在局部变量上调用的 Java 8 方法引用

c++ - 为什么在我的析构函数中抛出时总是得到 "terminate called after throwing an instance of..."?

java - log4j GC的免费性能

java - 如何在遇到未处理的异常时关闭 java 日志文件

python - 如何将日期时间添加到日志文件名?

java - 从 Android 设备发出发布请求时出现意外的状态行

Java 执行正则表达式

java - GWT DataGrid 中可扩展行的简单示例

java - Eclipse 显示嵌套类的两个 THIS$0 字段 (Java)

java - 在 Android 中,如何查看 try/catch block 中收到的错误?