Spring Boot のログ設定では、logback.xml ではなく logback-spring.xml を使うのが正しい方法です。 このファイルは Spring Boot の拡張機能を利用できる特別な設定形式で、プロファイル別設定や外部設定との連携をサポートします。本記事では、その仕組みと使い方を整理します。
単なる logback.xml(標準のLogback設定ファイル名)ではなく、logback-spring.xmlにすることで、Logbackの設定ファイルの制御権を Spring Bootが握る ようになります。
具体的なメリットは以下の3点です。
プロファイルによる出力の切り替え(<springProfile> )
これが最大のメリットです。設定ファイルの中に「この設定は開発環境だけ」「これは本番環境だけ」という条件分岐が書けるようになります。
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="APP_FILE" />
</root>
</springProfile>
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="APP_FILE" />
</root>
</springProfile>
Springの変数(application.properties)をログ設定で使える
application.properties で定義した値を、ログの設定ファイル内で ${} を使って参照できます。
- application.properties:
my.app.log-path=/var/log/myapp - logback-spring.xml:
<file>${my.app.log-path}/app.log</file>
これにより、ログの保存場所などの「環境によって変わる値」を、XMLをいじらずにプロパティファイルだけで管理できるようになります。
設定の読み込みタイミングの最適化
logback.xml: Springが起動する前に読み込まれます。そのため、Springの便利な機能(プロファイルなど)が使えません。
logback-spring.xml: Springが起動を開始し、環境設定(プロパティ)を読み込んだ後に処理されます。
例えば、本番環境と、手元のEclipse(開発環境)で以下のように使い分けができます。
- Eclipseで実行する時: 起動引数に
-Dspring.profiles.active=devを渡す。 → ログがコンソールにドバドバ出て、デバッグしやすい! - サーバにデプロイする時: 起動引数に
-Dspring.profiles.active=prodを渡す。 → ログはファイルに静かに記録され、ディスクを節約できる!

