投稿日:
2019年5月7日
最終更新日:
【RequestBody/RequestHeader】SpringBoot2でリクエスト情報をログに出力する方法【CommonsRequestLoggingFilter】
YouTubeも見てね♪
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
目次
リクエストログを出力しよう
サーバーのログ解析をする場合、どんなリクエストが飛んできた際のログなのか?という情報が重要になってきます。
自前でインターセプターなどを使って実装しても良いのですが、SpringBootを使っていれば簡単に実現が可能です。
手順
CommonsRequestLoggingFilterを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
|
package tech.blogenist.service.account.api.infrastructure.filter.x_request_id;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CommonsRequestLoggingFilter;
@Configuration
public class XRequestIdFilterConfig
{
...
@Bean
public CommonsRequestLoggingFilter requestLoggingFilter()
{
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeClientInfo( true );
filter.setIncludeQueryString( true );
filter.setIncludeHeaders( true );
filter.setIncludePayload( true );
return filter;
}
...
}
|
次に、application.yml
にて、以下の設定を追加しましょう。
CommonsRequestLoggingFilter
では、DEBUGレベルで出力しているので、出力対象にする必要があります。
1
2
3
4
5
6
7
|
logging:
level:
org:
springframework:
web:
filter:
CommonsRequestLoggingFilter: DEBUG
|
確認
GETの場合
では、実際にGETリクエストを投げてみましょう。
1
2
3
4
|
curl -v -X GET \
-H 'Content-Type: application/json' \
-H 'hoge: fuga' \
'http://localhost:8080/v1/accounts/10001/?query=blogenist'
|
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
27
28
29
30
31
|
{
"timestamp":"2019-05-05T00:00:56.006+09:00",
"level":"DEBUG",
"thread":"http-nio-8080-exec-5",
"mdc":{"x-request-id":"4169a153-e26c-4275-a4d4-8391d5183e66"},
"logger":"org.springframework.web.filter.CommonsRequestLoggingFilter",
"message":"Before request [
uri=/v1/accounts/10001/?query=blogenist;client=0:0:0:0:0:0:0:1;headers=[
host:\"localhost:8080\",
user-agent:\"curl/7.64.0\",
accept:\"*/*\",
hoge:\"fuga\",
Content-Type:\"application/json;charset=UTF-8\"
]
]"
}{
"timestamp":"2019-05-05T00:00:56.020+09:00",
"level":"DEBUG",
"thread":"http-nio-8080-exec-5",
"mdc":{"x-request-id":"4169a153-e26c-4275-a4d4-8391d5183e66"},
"logger":"org.springframework.web.filter.CommonsRequestLoggingFilter",
"message":"After request [
uri=/v1/accounts/10001/?query=blogenist;client=0:0:0:0:0:0:0:1;headers=[
host:\"localhost:8080\",
user-agent:\"curl/7.64.0\",
accept:\"*/*\",
hoge:\"fuga\",
Content-Type:\"application/json;charset=UTF-8\"
]
]"
}
|
POSTの場合
次に、POSTリクエストを投げてみましょう。
1
2
3
4
5
|
curl -v -X POST \
-H 'Content-Type: application/json' \
-H 'hoge: fuga' \
-d '{"fizz": "bazz"}' \
'http://localhost:8080/v1/accounts/'
|
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
27
28
29
30
31
32
33
34
35
36
|
{
"timestamp":"2019-05-04T23:48:17.008+09:00",
"level":"DEBUG",
"thread":"http-nio-8080-exec-7",
"mdc":{"x-request-id":"9d1bb6cb-0a2b-45f9-957c-d5e1c027b160"},
"logger":"org.springframework.web.filter.CommonsRequestLoggingFilter",
"message":"Before request [
uri=/v1/accounts/;client=0:0:0:0:0:0:0:1;headers=[
host:\"localhost:8080\",
user-agent:\"curl/7.64.0\",
accept:\"*/*\", hoge:\"fuga\",
content-length:\"16\",
Content-Type:\"application/json;
charset=UTF-8\"
]
]"
}
{
"timestamp":"2019-05-04T23:48:17.010+09:00",
"level":"DEBUG",
"thread":"http-nio-8080-exec-7",
"mdc":{"x-request-id":"9d1bb6cb-0a2b-45f9-957c-d5e1c027b160"},
"logger":"org.springframework.web.filter.CommonsRequestLoggingFilter",
"message":"After request [
uri=/v1/accounts/;client=0:0:0:0:0:0:0:1;headers=[
host:\"localhost:8080\",
user-agent:\"curl/7.64.0\",
accept:\"*/*\", hoge:\"fuga\",
content-length:\"16\",
Content-Type:\"application/json;
charset=UTF-8\"
];payload={
\"fizz\":\"bazz\"
}
]"
}
|
正常にリクエスト内容が出力されていますね♪
ちなみに、Payload(リクエストボディ)はBefore RequestではなくAfter Requestのみ出力されるので気をつけてください。
終わりに
以上のように、簡単にリクエスト情報をログに出力する事が出来ました。
運用が始まってからでは遅いので、初期開発時に忘れないように設定しておきましょう。