暇な日々にスパイスを

学んだ技術の備忘録

Spring Boot 8 リクエスト, レスポンスのログ出し

SpringBootのログ出しについてです。

以前書いたAOPのログ出しですが、 メソッドのIn,Outについての出力です。

WebAPIではリクエスト,レスポンスも出力出来たほうが良いと思います。
そこで、Controlerの前後に実行されるInterceptorを実装します。

HandlerInterceptorインターフェイスを実装したクラスを作成します。
f:id:snona:20160218033915p:plain
オーバライドするメソッドは以下の3点です。

  • preHandle
    • Controllerの呼び出し前に呼び出されます。
    • 返り値がTrue出ないとControllerが呼び出されなくなります。
  • postHandle
    • Controllerの後、Viewの描画前に呼び出されます。
  • afterCompletion
    • Controllerの後、Viewの描画後に呼び出されます。

実装したInterceptorをDIコンテナに対して登録します。
f:id:snona:20160218034708p:plain
MappedInterceptorの第1引数は対象のパターン(nullで全てを対象に取る)、第2引数は除外するパターン、第3引数が先ほど実装したクラスです。
今回はjsやhtmlと言った静的コンテンツを除外しています。

また、以前のAOPによる差し込み対象に、今回実装したクラスが含まれていると動作しなくなるため、AOPのログ出し対象から除外するようにします。
f:id:snona:20160218035023p:plain
対象のパッケージを狭め、実装したInterceptorを含まれないパッケージに格納します。

実行結果は以下のようになります。
f:id:snona:20160218034342p:plain

今回はログ出しに利用しましたが、本来は共通処理に使用するもののようです。