LOG.error("IOException: " + e.getMessage(), e); 和有什么区别?和 LOG.error("IOException: " +e.getMessage());?

What is the difference between LOG.error("IOException: " + e.getMessage(), e); and LOG.error("IOException: " +e.getMessage());?

我观察到这两种说法都是有效的。与第二个语句相比,第一个语句中记录的额外内容是什么?

第一个还记录原始异常(和堆栈跟踪),第二个仅记录消息。

因此,第一个语句中记录的 'extra thing' 是原始异常。这通常是一件好事,因为这样可以更轻松地调试错误。

根据文档

void error(Object message) => 记录具有错误日志级别的 消息

void error(Object message, Throwable t) => 记录一个 error 错误日志级别。

我想这可能会解决你的疑问。

如果您使用带有 throwable 参数的方法,支持团队将非常感谢您。第二个只打印异常的原因,第一个显示堆栈跟踪。

如果您在 try / catch 中使用第二个异常,您可能隐藏了原始异常,因为它只打印第一个异常的消息。