ねこじゃすり
猫を魅了する魔法の装備品!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
スポンサーリンク
目次
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形式にする事でログ解析作業の効率化に繋がるので、皆さんも参考にしてみてはいかがでしょうか♪