我正在使用spring引導來處理其他api。我需要使用輸入參數記錄所有請求(使用方法,例如GET,POST等),請求Url,查詢字符串,以及此操作的響應,成功和錯誤以及狀態碼。Spring引導日誌記錄Http通信
我不僅需要記錄傳入的https請求/響應,還要傳出https請求/響應。 我必須用json格式記錄請求/響應。 你能告訴我春季最好的做法來達到這個目的嗎?
我正在使用spring引導來處理其他api。我需要使用輸入參數記錄所有請求(使用方法,例如GET,POST等),請求Url,查詢字符串,以及此操作的響應,成功和錯誤以及狀態碼。Spring引導日誌記錄Http通信
我不僅需要記錄傳入的https請求/響應,還要傳出https請求/響應。 我必須用json格式記錄請求/響應。 你能告訴我春季最好的做法來達到這個目的嗎?
通常這可以通過使用servlet filter來完成。一個servlet過濾器「攔截」了進入的請求,並且響應就出來了。您可以從HttpServletRequest和HttpServletResponse中訪問所需的所有信息,然後根據需要將其記錄下來。
簡單的例子:
public class LoggingFilter implements javax.servlet.Filter {
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingFilter.class);
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
// log information from the httpServletRequest like url, params, etc
filterChain.doFilter(servletRequest, servletResponse);
// log information regarding the httpServletResponse like status code, etc
}
}
中註冊您的@ SpringBootApplication註解級過濾:
@Bean
public FilterRegistrationBean loadBalancerHealthCheckHandler() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new LoggingFilter());
registration.addUrlPatterns("/*");
return registration;
}
謝謝jorgen.ringen。我可以用它來處理傳入的請求,但是如何攔截請求呢? – NAZEHA
這是一個好的開始。這也是我目前如何完成的。但是在Spring MVC之前訪問請求體存在一個問題。 HttpServletRequest只會通過InputStream咳嗽請求主體。你必須做一些技巧來緩存請求體,以便可以多次訪問它。 –
有org.springframework.web.filter.CommonsRequestLoggingFilter,你可以用它來記錄查詢字符串,標題和正文內容前,請求後。
// filter will be applied to all paths
@Bean
public CommonsRequestLoggingFilter loggingFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(true);
filter.setIncludeHeaders(true);
filter.setIncludePayload(true);
filter.setMaxPayloadLength(1000); // default is 50 bytes
return filter;
}
還有一些額外的設置。此外,如果此實現不適合,則可以繼承org.springframework.web.filter.AbstractRequestLoggingFilter
並覆蓋方法以使其符合您的要求。
它利用了org.springframework.web.util.ContentCachingRequestWrapper
,它允許您多次讀取請求內容。
你使用嵌入式碼頭或外部tomcat? –
我使用外部的tomcat。 – NAZEHA
您正在使用哪個HTTP客戶端? –