2011-10-07 118 views
0

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

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

我听到一些相互矛盾的观点,如:

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

我发现了一些有趣的文章,但是他们都没有涉及到这个特殊主题:

这可能意味着这些文章的作者有同样的问题,因为我做:-)

我会在你看来对这个问题很感兴趣。

回答

7

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

还要注意的是:

log.error("Houston, we have a problem", ex); 

将打印人可读的信息在线路标记为错误,堆栈跟踪以下该行一段时间。如果你想让你的错误只是人类可读的,那就做grep ERROR

1

我并不确定最佳实践建议,但最终对我来说归结为: 例外情况应仅在特殊情况下可见。发明异常的概念是为了让开发人员有机会在内部处理错误。

实际上,我看到的大多数代码甚至都没有尝试处理它们,而是将它们转储到日志,sysout(或全部最坏情况)到对话框中。我知道,对于开发者来说,在某些情况下完全可以跟踪是很重要的。但几乎不是所有这些。创建你自己的异常框架(这绝对是一个最佳实践)可能已经足以通过类名简单地找出异常的上下文。

所以我会建议做到以下几点:

  1. 创建自己的异常框架
  2. 在邮件中包含特定的错误代码,以供大家参考
  3. 登录错误
  4. 异常消息在DEBUG上记录堆栈跟踪
  5. 永远不要显示用户这些。而是显示一条有用的信息。也许包括一种方法来报告错误(与stacktrace)与最小模糊。

注意:如果你正在编写一个内部的“企业”软件,忘记我写的所有内容。 :-)

0

我认为应该根据优先级最佳实践将堆栈跟踪记录在适当的位置。取决于例外的性质和它在应用程序中的位置,这可能是许多级别之一。请参阅此相关问题: Commons Logging priority best practices

相关问题