ホームページ >Java >&#&チュートリアル >Java で HTTP サーブレット応答出力ストリーム コンテンツをキャプチャしてログに記録する方法

Java で HTTP サーブレット応答出力ストリーム コンテンツをキャプチャしてログに記録する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 16:06:021036ブラウズ

How to Capture and Log HTTP Servlet Response Output Stream Content in Java?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。