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.
}
}
我们使用 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.
}
}