在Java中使用什么级别的异常堆栈跟踪日志记录?

mic*_*ski 0 java error-handling exception stack-trace

我正在寻找有关如何有效记录异常及其堆栈跟踪的最佳实践文档(或您的意见).当然,假设一个流行的日志框架,如Log4J,SLF4J,java.util.logging等.

我对你应该记录什么级别的堆栈跟踪的意见特别感兴趣.

我听到几个相互矛盾的意见,例如:

  • 堆栈跟踪应仅在DEBUG级别记录,而ERROR级别应仅包含"人类可读"错误消息
  • 堆栈跟踪应记录在ERROR级别,以便为操作员提供查找异常根本原因所需的最大信息量

我找到了几篇有趣的文章,但没有一篇涉及这个特定的主题:

这可能意味着这些文章的作者与我有同样的担忧:-)

我对你对这个问题的看法非常感兴趣.

Tom*_*icz 8

堆栈跟踪是您在进行故障排除时获得的最有价值的信息.我永远不会冒险在DEBUG级别登录,因为它可能被禁用.我几乎从不想压制堆栈痕迹.

另请注意:

log.error("Houston, we have a problem", ex);
Run Code Online (Sandbox Code Playgroud)

将在标记为ERROR的行中打印人类可读消息,而堆栈跟踪在该行之后.如果您希望您的错误只是人类可读的,那就行了grep ERROR.