投稿日:
2019年4月28日
最終更新日:
【SpringBoot2】Logbackで環境ごとにログファイルを出し分けするやり方【log4jの後継種】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
目次
ロギングを環境ごとに分けよう
org.springframework.boot:spring-boot-starter-web
の依存関係を追加してSpringBootで開発を行う場合、デフォルトでLogback
というロギングライブラリを採用します。
Logbackとは、Log4j
の開発者が作った新しめのJava製のロギングライブラリです。
SpringBootとの親和性がとても高く、ログのフォーマット指定やローテート、出力先や環境ごとの切り替えなどがとても簡単に設定をすることが出来ますので、今回はそちらをご紹介していきます。
手順
logback-spring.xmlの作成
まずはクラスパス配下にlogback-spring.xml
を配置しましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="FORMAT" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %logger{36} - %msg%n" /> //共通のフォーマット定義
<property name="LOG_DIR" value="logs" /> //共通の出力先ベース定義
<property name="FILNE_NAME" value="account-service.log" /> //共通のファイル名定義
<springProfile name="local"> //profileがlocalの場合
<include resource="logback/local-layout.xml" />
</springProfile>
<springProfile name="staging"> //profileがstagingの場合
<include resource="logback/staging-layout.xml" />
</springProfile>
<springProfile name="production"> //profileがproductionの場合
<include resource="logback/production-layout.xml" />
</springProfile>
</configuration>
|
layout.xmlの作成
次に、上記ファイルでinclude
している各環境ごとのログレイアウトファイルを用意します。
今回は各環境ごとのフォルダを生成してその中にログファイルを吐き出すようにしてみます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<included>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[local]${FORMAT}</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/local/${FILNE_NAME}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/local/${FILNE_NAME}.%d{yyyy-MM-dd}.log.tar.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[local]${FORMAT}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</included>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<included>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[staging]${FORMAT}</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/local/${FILNE_NAME}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/local/${FILNE_NAME}.%d{yyyy-MM-dd}.log.tar.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[staging]${FORMAT}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</included>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<included>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/production/account-service.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/production/account-service.%d{yyyy-MM-dd}.log.tar.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</included>
|
確認
この状態で各プロファイルごとにアプリケーションを実行すると、以下のように設定ファイルに沿ってログが出力されるようになります。
1
2
3
4
5
6
7
|
api/logs
├── local
│ └── account-service.log
├── production
│ └── account-service.log
└── staging
└── account-service.log
|
フォーマットも指定通りになっていますね♪
[local][INFO ] 2019-04-28 12:15:26.777 o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"]
一つのファイルで環境分けする事も可能
今回はプロファイル単位でファイルを用意してincludeしていますが、一つのファイル内で完結させる事も可能です。
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
37
38
39
40
41
|
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="FORMAT" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %logger{36} - %msg%n" />
<property name="LOG_DIR" value="logs" />
<property name="FILNE_NAME" value="account-service.log" />
<springProfile name="local">
<property name="SPRING_PROFILE" value="local" />
</springProfile>
<springProfile name="staging">
<property name="SPRING_PROFILE" value="staging" />
</springProfile>
<springProfile name="production">
<property name="SPRING_PROFILE" value="production" />
</springProfile>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[${SPRING_PROFILE}]${FORMAT}</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${SPRING_PROFILE}/${FILNE_NAME}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${SPRING_PROFILE}/${FILNE_NAME}.%d{yyyy-MM-dd}.log.tar.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[${SPRING_PROFILE}]${FORMAT}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
|
終わりに
以上のように、簡単にログフォーマットの変更や環境ごとの設定を分けることが出来ました。
他にもローテートの設定や保存期間の設定なども細かく出来るのでぜひ試してみてください♪