一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • 【Spring2.4以降】logbackを環境ごとに切り替える方法

「SpringBootで環境ごとにlogbackを切り替えたいな!」

と思って色々調べながら実装しようとしたら全然うまくいかなかったので、どうやって対応したかを記しておきます。

事象

主に参考にした記事

以下2つの記事が分かりやすく参考にしました。(うまくいかなかったやり方です。)

【SpringBoot2】Logbackで環境ごとにログファイルを出し分けするやり方【log4jの後継種】

 

ざっくりやり方を説明すると、logback.xml(logback-spring.xml)に<springProfile>のタグを記載し、環境ごとにlogbackを切り替えます。

<springProfile name=”xxx”>の”xxx”の部分はapplication.ymlのspring.profiles.activeで指定した値と紐づきます。

 

あ、ちなみに、今回の対応(ログを環境ごとに切り替える対応)の前から、環境ごとにapplication.ymlを切り替えるようにしていました。

  • application.yml
  • application-staging.yml
  • application-production.yml

「じゃあspring.profiles.activeの定義を追加すれば簡単じゃん!!」

と舐めていたらエラーにぶち当たりました。

 

以下がその内容です。

org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property ‘spring.profiles.active’ imported from location ‘class path resource [application-staging.yml]’ is invalid in a profile specific resource [origin: class path resource [application-staging.yml]

 

ちなみに、STSでSpringBootアプリケーションを起動したときにはエラーは起こらず、herokuのstaging環境にデプロイしたタイミングで気づきました。

Spring2.4以降はこのやり方ができない

spring.profiles.activeはSpring2.4以降では使えないようです。

https://qiita.com/kakasak/items/3ef2aec516cb4e612fba

 

spring.profiles.active.on-profileだったり、spring.profiles.groupを使用して環境ごとの設定ができるようですが、logbackを切り替える方法についての記事が見当たらず手詰まり感が出てきました。

さて、どうしたものか…。

 

解決方法

解決方法はシンプルでした。

以下のようにapplication.ymlに設定すると「logback用のファイルはこれですよ!」と指定できるようです。

logging.config: classpath:logback-staging.xml

resourcesディレクトリからの相対パスとして、classpath:の後ろを編集すればOKです。

 

環境ごとにapplication.ymlを切り替えて、logbackの設定ファイル名はその中に記載しておく感じです。

なんかあっさりと解決しちゃいました。

 

参考

https://spring.pleiades.io/spring-boot/docs/current/reference/html/features.html#features.logging

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア