ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
スポンサーリンク
目次
カスタムヘッダーも簡単に設定可能
SpringBootを使ってAPI開発をしている場合、簡単にレスポンスヘッダーへ独自項目を追加する事が可能です。
今回は以前の記事でログに含めるために発行したX-Request-ID
を、全リクエスト時のレスポンスヘッダーに自動で追加する方法をご紹介致します。
例えば、アプリから呼ばれるAPIなどのシステムの場合は、お問い合わせ時やシステムエラーのフィードバック時にサーバーから返ってきたX-Request-IDを含ませる事で、容易にサーバーログを絞る事が出来るためよりスピーディーにログ調査が行えます。
手順
OncePerRequestFilterを継承したFilterクラスを実装
まずは、前回のフィルターで発行されたX-Request-Id
をMDC
から取得し、レスポンスヘッダーに追加するFilterクラス
を実装しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package tech.blogenist.service.account.api.infrastructure.filter.x_request_id; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.MDC; import org.springframework.web.filter.OncePerRequestFilter; public class ResponseHeaderAddXRequestIdFilter extends OncePerRequestFilter { @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain ) throws ServletException, IOException { String xRequestId = MDC.get( MdcXRequestIdFilter.KEY ); response.setHeader( MdcXRequestIdFilter.KEY, xRequestId ); filterChain.doFilter( request, response ); } } |
ConfigurationクラスでBean定義
次に、前回作ったConfigurationクラス
にて新たにBeanとして追加しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package tech.blogenist.service.account.api.infrastructure.filter.x_request_id; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class XRequestIdFilterConfig { @Bean public MdcXRequestIdFilter mdcXRequestIdFilter() { MdcXRequestIdFilter filter = new MdcXRequestIdFilter(); return filter; } //追加 @Bean public ResponseHeaderAddXRequestIdFilter responseHeaderAddXRequestIdFilter() { ResponseHeaderAddXRequestIdFilter filter = new ResponseHeaderAddXRequestIdFilter(); return filter; } } |
準備はこれだけです!
確認
では、実際に確認してみましょう。
1 2 3 4 5 6 7 8 9 10 |
#サーバーログ [DEBUG] [23e55d17-7d0c-4a8c-82e6-256df17b670a] [2019-05-01 15:26:34.619] [o.h.engine.internal.TwoPhaseLoad] - Done materializing entity [tech.blogenist.service.account.entity.db.account.CurrentAccountInfomationsTableEntity#component[value]{value=10001}] # レスポンスヘッダー < HTTP/1.1 200 < x-request-id: 23e55d17-7d0c-4a8c-82e6-256df17b670a < Content-Type: application/json;charset=UTF-8 < Transfer-Encoding: chunked < Date: Wed, 01 May 2019 06:26:34 GM |
サーバーログのX-Request-ID
とレスポンスヘッダーのX-Request-ID
の値が同じになっていますね♪
もちろん、独自エラーのスロー時やシステムエラー時にもレスポンスヘッダーに追加されているので調査が捗りそうです。
オススメの商品
終わりに
以上のように、簡単なクラスを追加するだけでログ調査が何倍もやりやすくなります。
何も仕込んでないログを漁るのは地獄なので、是非X-Request-ID
を仕込んでみてください♪