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

标签 java spring-boot exception-handling

我正在开发一个微服务,它根据存储在其自己的数据存储中的某些配置进行一些计算。计算 api 通过 REST API 存储。该应用程序是一个 spring boot 应用程序。 现在应用程序主要有 3 层:

  1. REST Controller
  2. 服务层
  3. DAO 层 - 它使用了 spring 数据。

我计划使用以下几点来处理日志记录和异常处理:

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

  • 如果在DAO层或者Service中有checked exception 层然后记录它们并抛出派生自的自定义异常 运行时异常。

  • 有几个应该从服务中抛出的自定义异常 层主要是在我们遇到无效值、null 等场景时 值(value)观等

  • 在 REST Controller 中有一个 try catch block 并记录 异常即消息和堆栈跟踪并返回 做出相应的回应。

所以总体思路是让 RuntimeExceptions 一直传播到 REST Controller ,在那里它们应该被记录下来,相应地应该发送响应。 Incase of checked exceptions 用相同的方法记录它们并抛出自定义异常。

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

最佳答案

controller advice这将捕获所有异常并记录所需的内容。您可能会在这里捕获异常。我实现了你在这里问的一样。

*/
/**
 * Uncaught exception handler
 * @param e - Exception
 */
@ExceptionHandler(Exception.class)
@ResponseStatus(code=HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public void handleError(Exception e,HttpServletRequest request, HttpServletResponse response){
    logger.error("Exception occured : {}",e);
        //logs request & response here
}

另请检查AbstractRequestLoggingFilter在这里描述。

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

关于java - Java 微服务中的日志记录和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702195/

相关文章:

java - Java中从控制台获取输入: Is it blocking or non-blocking?

java - 在模块化程序中使用多维数组

java - SimpleCursorAdapter 未定义?

java - 关于 Spring Data JDBC + Hikari + Postgres JSONB 的问题

gradle - 将自定义JVM参数添加到Spring Boot生成的bat/sh脚本

java - 如何在线程中处理 RuntimeException

java - 用于无效 Json 字符串的 Jersey 自定义异常映射器

java - 获取多个用户进行基本身份验证、Spring Boot 安全性

java - 如果您在数据库中保存 Java 异常信息,您应该保存异常的哪些部分以帮助在没有冗余的情况下找出问题?

java - throw 或尝试接住