编程语言
首页 > 编程语言> > java – Spring Boot – 如何在一个地方记录所有具有异常的请求和响应?

java – Spring Boot – 如何在一个地方记录所有具有异常的请求和响应?

作者:互联网

我正在用弹簧靴做休息api.我需要使用输入参数(使用方法,例如GET,POST等),请求路径,查询字符串,此请求的相应类方法,以及此操作的响应,成功和错误来记录所有请求.

举个例子:

成功要求:

http://example.com/api/users/1

日志应该看起来像这样:

{
   HttpStatus: 200,
   path: "api/users/1",
   method: "GET",
   clientIp: "0.0.0.0",
   accessToken: "XHGu6as5dajshdgau6i6asdjhgjhg",
   method: "UsersController.getUser",
   arguments: {
     id: 1 
   },
   response: {
      user: {
        id: 1,
        username: "user123",
        email: "user123@example.com"   
      }
   },
   exceptions: []       
}

或者请求错误:

http://example.com/api/users/9999

日志应该是这样的:

    {
       HttpStatus: 404,
       errorCode: 101,                 
       path: "api/users/9999",
       method: "GET",
       clientIp: "0.0.0.0",
       accessToken: "XHGu6as5dajshdgau6i6asdjhgjhg",
       method: "UsersController.getUser",
       arguments: {
         id: 9999 
       },
       returns: {            
       },
       exceptions: [
         {
           exception: "UserNotFoundException",
           message: "User with id 9999 not found",
           exceptionId: "adhaskldjaso98d7324kjh989",
           stacktrace: ...................    
       ]       
    }

我希望请求/响应成为单个实体,在成功和错误情况下都包含与此实体相关的自定义信息.

在春天实现这一目标的最佳做法是什么,可能是过滤器?如果是的话,你能提供具体的例子吗?

(我已经使用了@ControllerAdvice和@ExceptionHandler,但正如我所提到的,我需要在单个位置(和单个日志)处理所有成功和错误请求).

解决方法:

不要写任何拦截器,滤波器,组件,方面等,这是一个非常常见的问题,已经解决了很多次. Spring Boot有一个名为Actuator的模块,提供开箱即用的HTTP请求日志记录.有一个端点映射到/ trace(SB1.x)或/ actuator / httptrace(SB2.0),它将显示最近100个HTTP请求.您可以自定义它以记录每个请求,或写入数据库.要获得所需的端点,您需要执行器springboot依赖项,并且还要“查找”您正在寻找的端点,并可能设置或禁用它的安全性.

此外,此应用程序将在何处运行?你会使用PaaS吗?例如,主机提供商Heroku提供请求记录作为其服务的一部分,您无需进行任何编码.

标签:spring-rest,java,spring,logging
来源: https://codeday.me/bug/20190915/1805721.html