ホームページ >Java >&#&チュートリアル >分析のために HTTP サーブレットの応答出力ストリームのコンテンツをキャプチャしてログに記録する方法
分析用の HTTP サーブレット レスポンス出力ストリーム コンテンツのキャプチャとログ記録
Web 開発の領域では、受信および送信 HTTP リクエストと応答をログに記録しますこれはデバッグと監査の目的で非常に重要です。リクエストのログ機能を強化するには、サーブレットによって生成された実際のレスポンス コンテンツをキャプチャすることを検討してください。
これを実現するには、ServletResponse オブジェクトをラップするカスタム フィルターを作成します。 getOutputStream() メソッドと getWriter() メソッドをオーバーライドして、書き込まれたコンテンツを複製するカスタム ServletOutputStream 実装を返します。
次のコードは、拡張 Filter を示しています。
@WebFilter("/*") public class ResponseLogger implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { HttpServletResponseCopier responseCopier = new HttpServletResponseCopier((HttpServletResponse) response); try { chain.doFilter(request, responseCopier); responseCopier.flushBuffer(); } finally { // Perform logging operations with the captured response content. } } }
カスタム HttpServletResponseWrapper 内で、カスタムを返すには、getOutputStream() メソッドと getWriter() メソッドをオーバーライドする必要があります。書き込まれたデータをキャプチャする ServletOutputStream 実装。
public class HttpServletResponseCopier extends HttpServletResponseWrapper { private ServletOutputStream outputStream; private ServletOutputStreamCopier copier; @Override public ServletOutputStream getOutputStream() throws IOException { if (outputStream == null) { outputStream = getResponse().getOutputStream(); copier = new ServletOutputStreamCopier(outputStream); } return copier; } }
最後に、カスタム ServletOutputStream 実装は、データを書き込むためのオーバーライドを提供します。
public class ServletOutputStreamCopier extends ServletOutputStream { private ByteArrayOutputStream copy; @Override public void write(int b) throws IOException { super.write(b); copy.write(b); } }
このセットアップでは、分析やログ記録のために応答コンテンツを複製し、サーバーの HTTP インタラクションを完全に可視化します。
以上が分析のために HTTP サーブレットの応答出力ストリームのコンテンツをキャプチャしてログに記録する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。