おおくまねこ

職業プログラマーです。興味のある話題を書いています。

SpringBoot でログレベルを変更する

概要

SpringBoot でログレベルを変える方法について記載します。

 

記載した経緯

以下の理由からまとめてみようと思っています。

  • ログレベルの設定変更について、何度か説明機会があったこと
  • やること自体は複雑ではないため

ログレベルを変更するユースケース・メリット

ログレベルを変更するのは、アプリケーションの動作の経緯を確認するために使用します。

アプリケーションログは普段は必要な情報だけを取得できるよう、特定のレベル以上のログしか出ないようになっています。

SpringBootのデフォルトでは INFO に設定されています。

 

確認したい動作内容については抑制されたログレベルでしかでない場合があります。

そういった情報を取得するためにログレベルを変更します。

例えば以下

こういう情報が欲しい場合、ログレベルを変更して解析の情報源を取得します。

設定内容

ログレベルの設定変更は以下の2つのどちらかを選択します

  • アプリケーションの設定ファイルにログレベルを指定する
  • ロギングモジュールの設定でログレベルを指定する

アプリケーション設定ファイルに指定する

application.yaml, application.properties にある設定項目(logging.level.xxx )にログレベルを指定することで変更できます。

 

root (すべてのモジュール)のログレベルを、DEBUGから出力する場合は以下のように設定ます。

application.yaml の場合

logging:
level:
root: DEBUG

モジュール別にログレベルを指定可能で、level の後にパッケージ名も指定して個別に設定することも可能です。

 

SpringBootのロギング

SpringBoot のロギングモジュールの設定ファイルから指定することでログレベルを変更する方法もあります。

 

SpringBoot は Apache Commons Logging を使用しています。

spring-boot-starter-web をビルドツールの依存についてすれば、依存で使えるようになります。

具体的なログ出力の実装としては以下から選択できるようになっています。

今回は一旦デフォルトの Logback の場合について記載しています。

 

公式ドキュメントでは以下が該当します

docs.spring.io

 

Logback

標準のロギング実装モジュール、Logback を使う場合。

 

logback-spring.xml を resources 以下に置き、中に以下のように記載します。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration >
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-7([%level]) : %m%n</pattern>
</encoder>
</appender>

<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>

 

おまけ

設定の優先度について

アプリケーションの設定と、ロギングの設定を両方設定した場合、どちらが優先されるのか。

試した限りでは、以下の結果でした

  • 両方設定した場合、アプリケーションの設定のほうが優先される
  • 片方のみ設定した場合、指定した設定が有効化される
  • 設定がない場合、INFOレベルで出力される

 

最後に

ログ出力の内容は解析や切り分けに重要なので、知らない方はみれるようになると便利になるかと思っています。