投稿日:
2019年5月6日
最終更新日:
【SpingBoot2】LogbackのログをJson形式にする方法【CloudWatch】
YouTubeも見てね♪
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
目次
Json形式で見やすくしよう
Logbackをそのまま利用していると、基本的には一行のテキストで、Formatパターンに沿ったログが出力されると思います。
こんな感じ。
[INFO ] [2019-05-04 12:41:26.322] [o.a.catalina.core.StandardService] - Starting service [Tomcat]
しかし、一行の中に全ての情報が含まれていると、ログ解析時にちょっと見にくかったりとやや問題があります。
そこで、logback-json-classic
というライブラリを使う事で、logbackの出力ログをJson形式
にする事が可能になりますので、設定方法をご紹介します。
手順
依存関係の追加
build.gradle
に以下の2つのライブラリの依存関係を追加します。
1
2
3
4
5
6
|
buildscript {
...
implementation "ch.qos.logback.contrib:logback-json-classic:${accountService.logbackJsonVersion}"
implementation "ch.qos.logback.contrib:logback-jackson:${accountService.logbackJsonVersion}"
...
}
|
1
2
3
4
5
|
ext {
...
accountService.logbackJsonVersion = '0.1.5'
...
}
|
logback-spring.xmlの修正
次に、logback-spring.xml
を修正していきましょう。
標準出力の場合
標準出力の場合は以下のように修正してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?xml version="1.0" encoding="UTF-8"?>
...
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>true</prettyPrint>
</jsonFormatter>
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSXXX</timestampFormat>
<includeContextName>false</includeContextName>
<appendLineSeparator>true</appendLineSeparator>
</layout>
<charset>UTF-8</charset>
</encoder>
</appender>
...
</configuration>
|
確認
では、サーバーを起動してログを確認してみましょう。
1
2
3
4
5
6
7
8
9
10
|
{
"timestamp":"2019-05-04T19:47:51.347+09:00",
"level":"WARN",
"thread":"http-nio-8080-exec-1",
"mdc":{
"x-request-id":"c3a80300-0953-4635-802f-72abceb67b35"
},
"logger":"org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver",
"message":"Resolved [ResourceNotFoundException(errorType=RESOURCE_NOT_FOUND_COMMON)]"
}
|
正常にJson形式で出力されています。
見やすいですし、MDCに設定したx-request-id
も出力されていますね♪
AWS CloudWatchLogsの場合
以前紹介したCloudWatchへの転送時にもJson形式にする事が出来ます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version="1.0" encoding="UTF-8"?>
...
<appender name="CLOUDWATCH" class="com.j256.cloudwatchlogbackappender.CloudWatchAppender">
<region>ap-northeast-1</region>
<accessKeyId>XXX</accessKeyId>
<secretKey>YYY</secretKey>
<logGroup>blogenist-loggroup</logGroup>
<logStream>${SPRING_PROFILE}.${RUN_TIME}</logStream>
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>true</prettyPrint>
</jsonFormatter>
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSXXX</timestampFormat>
<includeContextName>false</includeContextName>
<appendLineSeparator>true</appendLineSeparator>
</layout>
<maxBatchSize>32</maxBatchSize>
</appender>
...
</configuration>
|
確認
こちらもサーバーを起動してリクエストを投げてみましょう。
こちらも正常にCloudWatchLogs上でJson形式でまとめて見やすくなりました♪
終わりに
以上のように、簡単にJson形式でログを出力出来るようになりました。
Json形式にする事でログ解析作業の効率化に繋がるので、皆さんも参考にしてみてはいかがでしょうか♪