ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク 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> |
終わりに
以上のように、簡単にログフォーマットの変更や環境ごとの設定を分けることが出来ました。
他にもローテートの設定や保存期間の設定なども細かく出来るのでぜひ試してみてください♪