gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:25 26 4
gpt4 key购买 nike

我正在使用 Spring Boot 开发 REST 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: ...................
]
}

我希望请求/响应成为单个实体,并在成功和错误情况下都具有与该实体相关的自定义信息。

Spring 实现此目的的最佳实践是什么,可能是使用过滤器?如果是的话,您能提供具体的例子吗?

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

最佳答案

不要编写任何拦截器、过滤器、组件、方面等,这是一个非常常见的问题,并且已经解决了很多次。

Spring Boot 有一个名为 Actuator 的模块,它提供开箱即用的 HTTP 请求日志记录。有一个端点映射到 /trace (SB1.x) 或 /actuator/httptrace (SB2.0+),它将显示最近 100 个 HTTP 请求。您可以自定义它来记录每个请求,或写入数据库。

要获取所需的端点,您需要 spring-boot-starter-actuator 依赖项,并且还需要将您正在查找的端点“列入白名单”,并可能为其设置或禁用安全性。

此外,该应用程序将在哪里运行?您会使用 PaaS 吗?托管提供商(例如 Heroku)将请求日志记录作为其服务的一部分提供,您无需进行任何编码。

关于java - Spring Boot - 如何在一个地方记录所有带有异常的请求和响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45415779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com