「SpringBootで環境ごとにlogbackを切り替えたいな!」
と思って色々調べながら実装しようとしたら全然うまくいかなかったので、どうやって対応したかを記しておきます。
以下2つの記事が分かりやすく参考にしました。(うまくいかなかったやり方です。)
【SpringBoot2】Logbackで環境ごとにログファイルを出し分けするやり方【log4jの後継種】
ざっくりやり方を説明すると、logback.xml(logback-spring.xml)に<springProfile>のタグを記載し、環境ごとにlogbackを切り替えます。
<springProfile name=”xxx”>の”xxx”の部分はapplication.ymlのspring.profiles.activeで指定した値と紐づきます。
あ、ちなみに、今回の対応(ログを環境ごとに切り替える対応)の前から、環境ごとにapplication.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環境にデプロイしたタイミングで気づきました。
spring.profiles.activeはSpring2.4以降では使えないようです。
https://qiita.com/kakasak/items/3ef2aec516cb4e612fba
spring.profiles.active.on-profileだったり、spring.profiles.groupを使用して環境ごとの設定ができるようですが、logbackを切り替える方法についての記事が見当たらず手詰まり感が出てきました。
さて、どうしたものか…。
解決方法はシンプルでした。
以下のようにapplication.ymlに設定すると「logback用のファイルはこれですよ!」と指定できるようです。
resourcesディレクトリからの相対パスとして、classpath:の後ろを編集すればOKです。
環境ごとにapplication.ymlを切り替えて、logbackの設定ファイル名はその中に記載しておく感じです。
なんかあっさりと解決しちゃいました。
https://spring.pleiades.io/spring-boot/docs/current/reference/html/features.html#features.logging