我正在寻找有关如何有效记录异常及其堆栈跟踪的最佳实践文档(或您的意见)。当然,假设一个流行的日志框架,如Log4J,SLF4J,java.util.logging等。
我对你应该记录什么级别的堆栈跟踪的意见特别感兴趣。
我听到很少互相矛盾的意见,如:
我找到了几篇有趣的文章,但没有一篇涉及这个特定主题:
这可能意味着这些文章的作者与我有同样的担忧: - )
我对你对这个问题的看法非常感兴趣。
答案 0 :(得分:8)
堆栈跟踪是您在进行故障排除时获得的最有价值的信息。我永远不会冒险在DEBUG级别登录,因为它可能被禁用。我几乎从不想压制堆栈痕迹。
另请注意:
log.error("Houston, we have a problem", ex);
将在标记为ERROR的行中打印人类可读消息,而堆栈跟踪则在该行之后。如果您希望您的错误只是人类可读,请执行grep ERROR
。
答案 1 :(得分:1)
我不确定这方面的最佳做法建议,但最后,对我来说,归结为: 只有在特殊情况下才能看到例外情况。发明异常的概念是为了让开发人员有机会在内部处理错误。
实际上,我看到的大多数代码甚至都没有尝试处理它们,而是将它们转储到对话框中的日志,sysout(或最糟糕的情况)。我知道,对于开发人员而言,在某些情况下获得完整的stacetrace非常重要。但并非几乎全部。创建自己的异常框架(这绝对是一种最佳实践)可能已足以仅通过类名来确定异常的上下文。
所以我建议你做以下事情:
注意:如果您正在编写内部“企业”软件,请忘记我写的所有内容。 : - )
答案 2 :(得分:0)
我认为堆栈跟踪应该根据优先级最佳实践记录在适当的位置。根据异常的性质及其在您的应用程序中的位置,这可能是许多级别之一。请看相关问题: Commons Logging priority best practices