13

Spring MVC を介して公開された REST サービスがあります。a を使用しHandlerExceptionResolverて例外をログに記録します。現在、次のログが記録されています。

  • 例外とそのスタック トレース
  • URL
  • リクエストヘッダー

JSON 投稿データもログに記録できれば、デバッグが容易になります。これを取得する方法について何か提案はありますか?

4

3 に答える 3

19

これを、アプリケーションの構成を表すクラスに追加します。

import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.filter.AbstractRequestLoggingFilter;

....

@Bean
public Filter loggingFilter(){
    AbstractRequestLoggingFilter f = new AbstractRequestLoggingFilter() {

        @Override
        protected void beforeRequest(HttpServletRequest request, String message) {
            System.out.println("beforeRequest: " +message);
        }

        @Override
        protected void afterRequest(HttpServletRequest request, String message) {
            System.out.println("afterRequest: " +message);
        }
    };
    f.setIncludeClientInfo(true);
    f.setIncludePayload(true);
    f.setIncludeQueryString(true);

    f.setBeforeMessagePrefix("BEFORE REQUEST  [");
    f.setAfterMessagePrefix("AFTER REQUEST    [");
    f.setAfterMessageSuffix("]\n");
    return f;
}

コメントアウトする必要があるかもしれません

   f.setIncludePayload(true);
于 2014-08-26T18:56:26.940 に答える
10

読み取り時にリクエスト本文を保存し、保存されたデータを後で例外ロガーに提供するフィルターが必要です。

Spring にAbstractRequestLoggingFilterは、同様のことを行うものが含まれています。問題に直接適しているわけではありませんが、独自のフィルターを実装するための参考として使用できます。

于 2012-09-11T14:18:26.110 に答える
6

リクエスト/レスポンスのペイロードをログに記録する簡単な方法はありません。Java Web フィルターを使用して、すべての要求と応答をインターセプトし、ストリームから JSON データを読み取ることができます。ただし、ストリームからデータを読み取るときに、実際のデータがストリームから使い果たされるという問題が 1 つあります。

したがって、実際のリクエストおよびレスポンス オブジェクトのラッパーを実装する必要があります。要求応答のコピーされたバージョンのみがログに記録されます。次のような同様のソリューションを実装し、要件を満たしました。

http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431

http://angelborroy.wordpress.com/2009/03/04/dump-request-and-response-using-javaxservletfilter/

于 2012-09-11T14:35:48.943 に答える