我正在和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有一个叫做执行器的模块,它提供了即用即用的HTTP请求登录。有一个端点映射到/trace
(SB1.x)或/acture/httptrace
(SB2.0+),它将显示最后100个HTTP请求。您可以自定义它来记录每个请求,或者写入DB。
为了获得您想要的端点,您需要spring-引导-启动-执行器依赖项,还需要“白名单”您要查找的端点,并可能为其设置或禁用安全性。
还有,这个应用程序会在哪里运行?您会使用PaaS吗?托管提供商(例如Heroku)提供请求日志记录作为其服务的一部分,因此您不需要进行任何编码。
问题内容: 从技术上来说,答案都不是。根据Java虚拟机规范,用于存储字符串文字的区域位于运行时常量池中。运行时常量池内存区域是按类或每个接口分配的,因此它根本不与任何对象实例绑定。运行时常量池是方法区域的子集,其中“存储每个类的结构,例如运行时常量池,字段和方法数据以及方法和构造函数的代码,包括用于类和实例初始化以及接口的特殊方法”类型初始化”。VM规范说,尽管方法领域 从逻辑上讲,它是堆的一部
应用程序应异步(在单独的线程中)记录以下信息,而不会影响客户端。 请求HTTP方法和URI 如果我们在过滤器中使用,那么spring将无法再次使用它进行json到对象的映射。在输入流到对象映射期间的某个地方,我们可以插入记录器吗? 更新: 我们可以在MessageConverter中编写日志代码,但这似乎不是一个好主意。
我希望我的ExceptionMapper捕获所有异常并记录它们。。。我现在正在使用Jersey 2.0。 我有一个异常映射器,如下所示: 此异常映射器仅在非WebApplication应用程序异常时被调用。 如何使一个全局异常映射器捕获所有异常,以便记录它们。我还有别的办法吗? 谢谢
问题内容: 我需要所有已登录的SOAP请求,以及持续时间(处理请求所花费的时间)。 最好的方法是什么?看起来可以为Spring WebServices配置log4j,但是它将记录所有值吗? 将以下行添加到log4j.xml 编辑:我们实际上是在使用,而不是。另外,看起来可以通过配置PayloadLoggingInterceptor来做到这一点 但是我不确定日志消息会去哪里。我将该拦截器添加到了我们
使用Java(android,但这是一个Java问题),我在应用程序类中创建了一个默认的异常处理程序,大致如下所示,它取自一些SO线程: 让我们谈谈我的目标是什么。我需要为crashLytics事故报告记录额外的信息。因此,每当发生异常时,就会调用钩子uncaughtException(线程线程,可抛出的ex)。我假设这将适用于崩溃和异常(不确定)。 关于这个问题的3个问题: 更新:我在这里看到有
我只收到请求,没有回应。