Home > Software engineering >  SpringBoot loggin request and response in the same line
SpringBoot loggin request and response in the same line

Time:12-30

We developed a Rest Api Backend with SpringBoot framework and RestControllers. Now, we have to generate a log (before send response), that contains: Request Headers - Request Body - Response Header - Response Body

Looking for an answer, we found some examples (using a filter or AOP), but all of these generate a log for request and an other log for response.

It is possibile to generate a single log? How?

Thank you!

CodePudding user response:

You can achieve by implementing filter. You can override doFilter method and log after chain process. Example code below.

@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.
    }
}
  • Related