我有一个实现ContainerRequestFilter和ContainerResponseFilter的类。我正在使用此类来记录请求及其对应的响应。我注意请求过滤器中的start_time并使用MDC.put将其传播到响应过滤器(" start-time",start_time)。 我可以看到,由于响应过滤器将ContainerRequestContext作为参数,因此它能够将响应映射到正确的请求。
但是我无法看到日志记录过滤器类如何能够区分同时发生的多个请求调用。每个请求是否都是日志过滤器类的不同实例?
答案 0 :(得分:0)
每个请求是否构成日志过滤器类的不同实例?
没有。因此,尝试存储成员状态不是一种选择。您应该使用ContainerRequestContext
在请求方设置属性。在响应方面,只需从相同的上下文中获取属性。
// request filter
filter(ContainerRequestContext request) {
request.setProperty("key", value);
}
// response filter
filter(ContainerRequestContext request, ContainerResponseContext response) {
Object value = request.getProperty("key");
}
每个请求都会获得自己的Container(Request|Response)Context
。