【问题标题】:What is the difference between LOG.error("IOException: " + e.getMessage(), e); and LOG.error("IOException: " +e.getMessage());?LOG.error("IOException:" + e.getMessage(), e); 有什么区别?和 LOG.error("IOException:" +e.getMessage());?
【发布时间】:2015-05-26 06:08:31
【问题描述】:

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

【问题讨论】:

  • 您可以使用 LOG API 进行检查。
  • 第一个只有原因(消息)。 second has 既有原因又有 throwable
  • 两者都无效,getMessage之后需要()

标签: java logging exception-handling


【解决方案1】:

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

因此,第一个语句中记录的“额外内容”是原始异常。这通常是一件好事,因为这样可以更容易地调试错误。

【讨论】:

  • Logger 可以配置为例如记录堆栈跟踪。有时非常有用。
  • 事实上,第一种形式包含e.getMessage() 以及“IOException!”大部分是多余的(无论如何都会被记录为异常的一部分)。最好使用日志消息来提供有用的上下文,例如这里正在执行什么操作、针对哪个用户、在哪个资源上。
【解决方案2】:

根据文档

void error(Object message) => 用错误日志级别记录 message

void error(Object message, Throwable t) => 使用错误日志级别记录 error

我认为这可能会解决您的疑问。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      相关资源
      最近更新 更多