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