2017-09-11 6 views
0

私はスプリングブートで残りのAPIに取り組んでいます。私はすべての要求を入力パラメータ(メソッド、例えばGET、POSTなど)でログに記録し、URL、クエリ文字列を要求し、このアクションの応答、成功とエラー、ステータスコードの両方を返す必要があります。スプリングブートロギングHTTP通信

私はHTTPS要求/応答も/応答HTTPS要求を出射する着信だけではなく、ログインする必要があります。 json形式でリクエスト/レスポンスを記録する必要があります。 これを達成するための春のベストプラクティスを教えてください。具体的な例を挙げてください。

+0

埋め込み式の桟橋や外壁を使用していますか? –

+0

私は外部のtomcatを使用しています。 – NAZEHA

+0

どのHTTPクライアントを使用していますか? –

答えて

0

通常これは、servlet filterを使用することによって達成できます。サーブレットフィルタは、リクエストを「インターセプト」し、そのレスポンスは途中で返されます。 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; 
} 
+0

私は着信要求にこれを使用できますが、要求を傍受するにはどうすればいいですか? – NAZEHA

+0

これは良いスタートです。これは私が現在同じように達成している方法です。しかし、Spring MVCの前にリクエストボディにアクセスすることには問題があります。 HttpServletRequestは、InputStreamを介して要求本体を一度呼び出すだけです。要求本体をキャッシュして複数回アクセスできるようにするには、トリッキーな作業が必要です。 –

1

クエリ文字列、ヘッダと本文の内容をログに記録するために使用できる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を使用すると、リクエスト内容を何度も読み取ることができます。

関連する問題