HTTP サーブレット応答出力ストリーム コンテンツのキャプチャとロギング
Java Web サーバーでは、受信リクエストの両方をログに記録する必要がある状況に遭遇することがあります。パラメータとその結果のサーバー応答。この記事では、ログ記録のために HTTP サーブレット レスポンスの出力ストリーム コンテンツを取得するソリューションを提供します。
これを実現するには、フィルターを利用して、HttpServletResponseWrapper と呼ばれるカスタム実装で HttpServletResponse オブジェクトをラップします。このラッパー内で、getOutputStream() メソッドと getWriter() メソッドをオーバーライドして、カスタマイズされた ServletOutputStream 実装である ServletOutputStreamCopier を返します。
ServletOutputStreamCopier は、元の出力ストリームをラップし、書き込まれたバイトを byteArrayOutputStream にコピーします。 ] getCopy() を介してmethod.
カスタム応答ラッパーを配置したら、それを FilterChain#doFilter() 呼び出しに渡します。要求と応答のサイクルが完了したら、コピーされた応答コンテンツを ServletOutputStreamCopier から取得してログに記録します。
このようなフィルターの実装例を次に示します。
public class ResponseLogger implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { if (response.getCharacterEncoding() == null) { response.setCharacterEncoding("UTF-8"); } HttpServletResponseCopier responseCopier = new HttpServletResponseCopier((HttpServletResponse) response); chain.doFilter(request, responseCopier); responseCopier.flushBuffer(); byte[] copy = responseCopier.getCopy(); System.out.println(new String(copy, response.getCharacterEncoding())); } }
このフィルター実装は応答をキャプチャします。バイト配列として出力され、ロギングやその他の必要な処理を処理できるようになります。
のコード スニペットソリューションを完成させるために、HttpServletResponseCopier と ServletOutputStreamCopier も提供されています。
以上がJava で HTTP サーブレット応答出力ストリーム コンテンツをキャプチャしてログに記録する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。