Spring MVC を介して公開された REST サービスがあります。a を使用しHandlerExceptionResolver
て例外をログに記録します。現在、次のログが記録されています。
- 例外とそのスタック トレース
- URL
- リクエストヘッダー
JSON 投稿データもログに記録できれば、デバッグが容易になります。これを取得する方法について何か提案はありますか?
これを、アプリケーションの構成を表すクラスに追加します。
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);
読み取り時にリクエスト本文を保存し、保存されたデータを後で例外ロガーに提供するフィルターが必要です。
Spring にAbstractRequestLoggingFilter
は、同様のことを行うものが含まれています。問題に直接適しているわけではありませんが、独自のフィルターを実装するための参考として使用できます。
リクエスト/レスポンスのペイロードをログに記録する簡単な方法はありません。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/