如果捕获到已知错误(异常),是否应该打印stacktrace?

如果我在春季启动应用程序中以JpaRepository为例。我有通常的Controller-> Service-> Repository层。可以说我想将某些内容保存到数据库中并且该项目已经存在(例如,由于在几列之间创建了唯一约束,所以引发了DataIntegrityViolationException)。

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

我的问题在这里:我应该打印stacktrace还是只做一个基本的logger.error(“一个项目已经存在,并且您尝试保存的值相同”)。

我找不到最佳做法。我的想法是,这是一个已知的错误,而且我知道出了什么问题,因此不需要stacktrace。它只是用多余的代码行向日志发送垃圾邮件。

有什么好的指针吗?


一只甜甜圈
浏览 220回答 3
3回答

长风秋雁

如果这是预期的行为,请捕获异常并执行明智的操作,并且不要记录错误。如果您决定要记录错误,请包括堆栈跟踪。在无法修复的日志中查找错误令人沮丧(这似乎是一个吗?),而且在日志中找不到足够详细的信息也很烦人。当然,如果您重新引发异常,请不要忘记包含原始异常(将其传递给构造函数)。

慕尼黑5688855

您应该为整个应用程序设置一个异常处理程序,该异常处理程序应捕获异常,记录它们并返回API的响应以及状态和消息。您应该出于org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler同样的目的检出spring boot提供的类。这是这堂课的官方文件{@link ControllerAdvice @ControllerAdvice}类的便捷基类,这些类希望通过{@code @ExceptionHandler}方法在所有{@code @RequestMapping}方法中提供集中式异常处理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java