#spring-boot #spring-mvc
#spring-boot #spring-mvc
Вопрос:
Есть ли какой-либо способ регистрировать полные HTTP-обмены (запрос ответ, включая заголовки полезные нагрузки) в службе spring-web REST?
Я видел CommonsRequestLoggingFilter, но он регистрирует только запрос. Есть ли соответствующий CommonsResponseLoggingFilter? Или другое решение?
В Джерси эта функциональность обеспечивается LoggingFeature, вам просто нужно ее включить.
Для HTTP-сервера я использую Tomcat по умолчанию. Есть AccessLogValve, но он не регистрирует полезную нагрузку.
В идеале я хотел бы что-то на уровне spring-web, похожее на Джерси, поэтому мне не нужно беспокоиться об этом, если я переключусь с Tomcat на Jetty или Undertow.
Ответ №1:
Я не уверен, есть ли у spring какой-либо встроенный фильтр, который помогает регистрировать оба запроса / ответа.
Но вы можете написать настраиваемый фильтр, чтобы сделать это.
@Component
public class CustomLoggingFilter extends GenericFilterBean {
@Override
public void doFilter(
final ServletRequest req,
final ServletResponse res,
final FilterChain chain)
throws IOException, ServletException {
CachedBodyHttpServletRequest reqWrap = new CachedBodyHttpServletRequest(
(HttpServletRequest) req);
ContentCachingResponseWrapper resWrap = new ContentCachingResponseWrapper(
(HttpServletResponse) res);
chain.doFilter(reqWrap, resWrap);
resWrap.copyBodyToResponse();
}
}
CachedBodyHttpServletRequest и ContentCachingResponseWrapper могут помочь вам многократно получать доступ к заголовкам / данным и выполнять несколько протоколирований без нарушения каких-либо данных.