首页 > 解决方案 > 如果发现已知错误(异常),是否应该打印堆栈跟踪?

问题描述

如果我在 spring-boot 应用程序中使用 JpaRepository 作为示例。我有通常的 Controller -> Service -> Repository 层。假设我想将某些内容保存到数据库中并且该项目已经存在(例如,DataIntegrityViolationException 被抛出,因为我在几列之间创建了一个唯一约束)。

所以可以说这是抛出。如果用户尝试保存已具有确切数据且已存储在数据库中的对象,则这是预期行为。

我的问题是:我应该打印堆栈跟踪还是只做一个基本的 logger.error(“一个项目已经存在,具有与您尝试保存的相同值”)。

我找不到这方面的最佳做法。我的想法是这是一个已知错误,我知道出了什么问题,所以我不需要堆栈跟踪。它只是用额外的代码行向日志发送垃圾邮件。

有什么好的指点吗?

标签: javaexceptionexception-handling

解决方案


如果这是预期行为,请捕获异常并做一些明智的事情,不要记录错误。如果您决定要记录错误,请包含堆栈跟踪。在日志中发现您无法修复的错误令人沮丧(这似乎是一个?)而且在没有足够详细信息的情况下在日志中发现错误也令人恼火。

当然,如果您重新抛出异常,请不要忘记包含原始异常(将其传递给构造函数)。


推荐阅读