Spring Boot 记录请求和响应在同一行

SpringBoot loggin request and response in the same line

我们使用 SpringBoot 框架和 RestControllers 开发了一个 Rest Api 后端。现在,我们必须生成一个日志(在发送响应之前),其中包含: 请求 Headers - 请求 Body - 响应 Header - 响应 Body

为了寻找答案,我们找到了一些示例(使用过滤器或 AOP),但所有这些都会生成请求日志和响应日志。

是否可以生成单个日志?怎么样?

谢谢!

可以通过实现过滤器来实现。您可以覆盖 doFilter 方法并在链处理后记录。下面的示例代码。

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) request);
    ContentCachingResponseWrapper responseWrapper =new ContentCachingResponseWrapper((HttpServletResponse) response);
    try {
        chain.doFilter(requestWrapper, responseWrapper);
    } finally {
        String requestBody=new String(requestWrapper.getContentAsByteArray(),requestWrapper.getCharacterEncoding());
        String responseBody=new String(responseWrapper.getContentAsByteArray(),responseWrapper.getCharacterEncoding());
        int statusCode = responseWrapper.getStatus();
        final String ip = requestWrapper.getRemoteAddr();
        final String requestUrl = requestWrapper.getRequestURL().toString();
        final String clientId = requestWrapper.getHeader("any-header");
        responseWrapper.copyBodyToResponse();
        // todo : here you can log any information which can extracted from request and response wrapper.
    }
}