gpt4 book ai didi

java - 如何在使用 CommonsRequestLoggingFilter 处理请求正文之前记录请求正文?

转载 作者:行者123 更新时间:2023-12-02 02:46:32 27 4
gpt4 key购买 nike

CommonsRequestLoggingFilter 在记录传入请求正文时工作正常。但是,它仅在处理完成后才记录它们。因此,当我记录响应正文时,它位于请求正文之前。我想知道是否有办法在处理请求之前记录请求。

我想提的另一件事是,CommonsRequestLoggingFilter 实际上知道何时收到请求,它会记录诸如 Request returned at... 之类的消息。但是,该日志不包含请求正文。处理消息后,它会记录几乎完全相同的内容,其中包含有效负载。

我的 CommonsRequestLoggingFilter 配置如下。没什么特别的。

@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
loggingFilter.setIncludeClientInfo(true);
loggingFilter.setIncludeQueryString(true);
loggingFilter.setIncludePayload(true);
return loggingFilter;
}

注意。显然,上述行为是有原因的。据说,在调用 getInputStreamgetReader 之前,无法调用 getContentAsByteArray。该方法在记录器内部调用。我不知道该怎么办。这是否意味着之前无法记录请求?

最佳答案

您可以在拦截器的execute()方法之前和之后记录如下。

public class LoggingInterceptor implements ClientHttpRequestInterceptor {

private final Logger log = LoggerFactory.getLogger(LoggingInterceptor.class);

@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
logRequest(request, body);
ClientHttpResponse response = execution.execute(request, body);
logResponse(response);
return response;
}

private void logRequest(HttpRequest request, byte[] body) throws IOException {
if (log.isDebugEnabled()) {
log.debug("URI : {}", request.getURI());
log.debug("Method : {}", request.getMethod());
log.debug("Headers : {}", request.getHeaders());
log.debug("Request body: {}", new String(body, "UTF-8"));
}
}

private void logResponse(ClientHttpResponse response) throws IOException {
if (log.isDebugEnabled()) {
log.debug("Status code : {}", response.getStatusCode());
log.debug("Status text : {}", response.getStatusText());
log.debug("Headers : {}", response.getHeaders());
log.debug("Response body: {}", StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
}
}
}

关于java - 如何在使用 CommonsRequestLoggingFilter 处理请求正文之前记录请求正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57140132/

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