Java中的微服务中的日志记录和异常处理

时间:2017-12-07 19:14:33

标签: java spring-boot exception-handling

我正在研究微服务,它根据存储在自己的数据存储中的某些配置进行一些计算。计算apis通过REST API存储。该应用程序是一个Spring启动应用程序。 现在应用程序中主要有3层:

  1. REST控制器
  2. 服务层
  3. DAO图层 - 它使用了弹簧数据。
  4. 我打算使用以下几点处理日志记录和异常处理:

    • 记录服务接收和响应的每个请求或至少 状态不在2xx系列中的响应。

    • 如果DAO层或服务中存在任何已检查的异常 图层然后记录它们并抛出从中派生的自定义异常 RuntimeException的。

    • 有多个自定义异常,应该从Service抛出 层主要是因为我们遇到无效值等场景,null 价值观等。

    • 在REST控制器中尝试catch块并记录 异常即消息以及stacktrace并返回 相应的回应。

    因此,总的想法是让RuntimeExceptions一直传播到REST控制器,在那里应该记录它们,因此应该发送响应。包含已检查的异常会以相同的方法记录它们,而是抛出自定义异常。

    请建议在此类应用程序中记录异常的正确或良好方法。

2 个答案:

答案 0 :(得分:0)

只选择一个地方来记录例外情况。

在您的设计中,如果DAO中发生异常,它将:

  • 登录DAO
  • 然后触发运行时异常,该异常将被捕获并记录在控制器
  • 然后应该通过REST返回非2xx响应状态,这将触发根据您的第一点记录响应

因此,您将在三个地方获得相同的信息,或者您将获得有关在日志中分散在两个或三个位置的单个错误的不同信息。

选择一个位置来记录错误,并确保在该位置存在所有相关信息(即将底层DAO异常设置为运行时异常的原因,并且不要忘记记录运行时异常以及其原因)。

答案 1 :(得分:0)

controller advice,它将捕获所有例外情况&记录所需的内容。你可以在这里捕捉例外。我实现了你在这里问的相同内容。

spark.blockManager.port

另请注意此处所述的AbstractRequestLoggingFilter

对于所有自定义应用程序特定的exeptions创建您自己的自定义异常类型&在上面的代码块中指定的@ExceptionHandler的帮助下处理它。