Spring Boot でリクエストヘッダーを取得しMDCでログを落とす

MDCで落とすログのフォーマット

MCDで落とすログのフォーマットはlogback.xmlで指定します。

logback.xml

%X{RequestId} にMDCでputした値が、%msg にSlf4jで出力したログ文字列がマッピングされます。

ほかにも%d{HH:mm:ss} でログの出力時間、[%thread] でログを出力したスレッド名、%-5level でログレベルなどが出力されます。

リクエストヘッダーの取得

RESTAPIのコントローラクラスとして以下のクラスを作成。

Controller.java

上の方のGETメソッドのエンドポイントではパスパラメータで受け取った値を、下のPOSTメソッドではリクエストボディをログに落としている。

ログでリクエストヘッダーのパラメータを落とすためにControllerが呼ばれる前に経由する、interceptorを以下で定義します。

RequestInterceptor.java

MDC.put(“RequestId”, requestId); でlogback.xmlで指定した%X{RequestId} のところに値がマッピングされます。

interceptorを経由するようにWebMVCの設定を追加します。

WebMvcConfig.java

動作確認

POSTのエンドポイントにリクエスト

出力されたログ

GETのエンドポイントにリクエスト

出力されたログ