Springでクラスごとにログレベルを変えるには?初心者向けログ設定の基本
新人
「先輩、Springアプリでログがたくさん出すぎて見づらいんですが、どうやって調整するんですか?」
先輩
「いい質問だね。Springでは、application.propertiesという設定ファイルを使って、クラスごとにログレベルを変えることができるんだ。」
新人
「クラスごとに変える?そんなことできるんですね!でもまず、ログレベルって何なんでしょうか?」
先輩
「それじゃあ、まずはSpringのログ出力の仕組みと、ログレベルの基本から見ていこうか。」
1. Springのログ出力とは?
Spring Frameworkでは、アプリケーションの動作を確認したり、不具合の原因を探したりするために「ログ」という情報を出力します。ログとは、プログラムが「いつ」「何をしたか」を記録する仕組みです。特にSpring Bootでは、標準でSLF4JとLogbackというライブラリが使われており、特別な設定をしなくてもすぐにログを出力できます。
pleiadesで作成したSpringプロジェクトをGradleで実行すると、コンソールに「Starting Application...」などのメッセージが出ます。これもログの一種です。これらのログは、アプリケーションのライフサイクルやエラー発生箇所を確認するための大切な情報になります。
ただし、全てのログを一律に出してしまうと、情報が多すぎて重要な部分を見逃してしまうことがあります。そこで「ログレベル」という考え方が登場します。
2. ログレベルの種類と意味
Springのログ設定では、出力する情報の重要度を「レベル」で分類します。代表的なログレベルは次の五つです。
- TRACE:プログラムの詳細な動作をすべて記録します。主にデバッグ用です。
- DEBUG:開発中の問題を調べるために使用します。通常は開発環境で使われます。
- INFO:アプリの一般的な動作(起動・終了・設定読み込みなど)を記録します。
- WARN:動作には影響しないが注意すべき事象を記録します。
- ERROR:処理に失敗した場合など、致命的なエラーを記録します。
ログレベルの設定によって、Spring Bootがどの範囲のログを出すかを制御できます。例えば、INFOに設定すれば、DEBUGやTRACEのような細かいログは出力されません。
つまり「どのレベルの情報を見たいか」を決めるのがログレベルの役割です。Springではこの設定を、application.propertiesファイルで簡単に行うことができます。
3. クラス単位でログを制御する必要性
Springアプリを開発していると、ログが大量に出力されることがあります。特にSpring MVCやRepository層など、複数のコンポーネントが関係するアプリでは、すべてのログを同じレベルで出すと見づらくなります。
例えば、com.example.controllerパッケージのログだけはDEBUGで詳細に見たいけれど、他のクラスはINFOで十分というケースがあります。そんなときに「クラスごとにログレベルを変える」設定が便利です。
Spring Bootでは、次のようにapplication.propertiesに設定することで、パッケージやクラス単位でログレベルを指定できます。
# 全体のログレベルをINFOに設定
logging.level.root=INFO
# 特定のクラスやパッケージだけDEBUGに設定
logging.level.com.example.controller=DEBUG
この設定を追加すると、Springアプリ全体のログはINFOレベルになりますが、コントローラ部分だけはDEBUGレベルで詳細な情報を出すようになります。つまり、ログの出力範囲を柔軟にコントロールできるのです。
pleiadesでGradleプロジェクトを実行すれば、設定を変更して再起動するだけでログの出力が変わることを確認できます。
補足:ログ設定の確認方法
ログ設定を変更した後は、実際に出力されるログメッセージを確認してみましょう。Spring Bootのコンソールでは、次のようなメッセージが表示されます。
2025-10-25 10:15:23 INFO 12345 --- [ main] c.e.demo.DemoApplication : Starting DemoApplication
2025-10-25 10:15:24 DEBUG 12345 --- [ main] c.e.controller.HomeController : DEBUGメッセージが出力されました
上記のように、コントローラクラスにだけDEBUGレベルのログが表示されていれば設定は成功です。このようにクラス単位で制御できると、開発中のトラブルシューティングやデバッグが非常に効率的になります。
理解ポイント
ここまでで、Springのログ設定の基本と、クラスごとにログレベルを変える必要性について学びました。次のステップでは、実際にどのように設定ファイルを編集して動作を確認するのかを見ていきますが、それは中盤の記事で解説します。
4. Spring Bootでログ設定を行うファイルの基本
Spring Bootでは、アプリケーション全体の設定を管理するためにapplication.propertiesというファイルを使います。このファイルは、プロジェクト内のsrc/main/resourcesフォルダに配置され、アプリの起動時に自動的に読み込まれます。
この設定ファイルには、データベース接続、ポート番号、Springの動作モード、そしてログ設定など、アプリ全体の動作をコントロールする重要な情報がまとめられています。特にログ設定はここで一元管理できるため、環境ごとに出力レベルを簡単に切り替えることが可能です。
pleiadesでSpringプロジェクトを作成した場合も、このapplication.propertiesファイルが最初から用意されています。Gradle構成のプロジェクトでも同様に、このファイルを編集するだけでログの出力内容を細かく調整できます。
たとえば、次のように設定することで、アプリ全体のログ出力レベルを指定できます。
# アプリ全体のログレベルをINFOに設定
logging.level.root=INFO
この設定を入れると、Spring Bootが出力するすべてのログがINFOレベルになります。つまり、DEBUGやTRACEのような細かいログは出なくなり、必要な情報だけがコンソールに表示されるようになります。
これが「全体のログ設定」の基本です。しかし、開発をしていると、特定のクラスだけ詳細にログを見たいという場面が出てきます。次はその設定方法を見てみましょう。
5. 特定のクラスだけログレベルを変える設定方法
Spring Bootの便利なところは、パッケージやクラス単位でログレベルを変更できる点です。これにより、全体のログはINFOのままにしつつ、特定の部分だけをDEBUGにすることができます。
たとえば、com.example.controllerパッケージの中だけをDEBUGにして、それ以外はINFOにする場合、次のように設定します。
# 全体はINFOレベル
logging.level.root=INFO
# コントローラだけDEBUGに設定
logging.level.com.example.controller=DEBUG
この設定を行うと、Spring Bootのアプリ起動時にはINFOレベルのログが出力され、コントローラクラス内ではより詳細なDEBUGメッセージが出力されます。
このように設定を分けることで、他のパッケージのログは静かに保ちつつ、特定の処理だけを詳しく確認できるようになります。特にトラブルシューティング時や、新しい機能をデバッグする際にとても役立ちます。
設定後は、アプリを再起動するだけで変更が反映されます。Spring Bootはapplication.propertiesを自動的に読み込むため、特別なコマンドや設定ファイルのリロード操作は不要です。
実際のコントローラ例とログ出力
それでは実際に、@Controllerを使ったクラスでログ出力を行う例を見てみましょう。ここでは、HomeControllerという名前のクラスを例に説明します。
package com.example.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@GetMapping("/")
public String home() {
logger.info("ホーム画面を表示します。");
logger.debug("デバッグ用メッセージです。");
return "index";
}
}
このクラスでは、INFOレベルとDEBUGレベルの両方のログを出力しています。つまり、設定によって出力されるメッセージの量が変わるわけです。
実際にこの状態でアプリを起動すると、コンソールにはINFOメッセージとDEBUGメッセージが出力されます。
2025-10-25 11:22:01 INFO 10000 --- [nio-8080-exec-1] c.e.controller.HomeController : ホーム画面を表示します。
2025-10-25 11:22:01 DEBUG 10000 --- [nio-8080-exec-1] c.e.controller.HomeController : デバッグ用メッセージです。
上記のように、com.example.controllerをDEBUGに設定しているため、両方のメッセージが確認できます。逆に、全体をINFOに設定してこの指定を外すと、DEBUGメッセージは表示されなくなります。
これが「特定クラスだけログを詳細に出す」という設定の効果です。
6. 設定を追加して動作を確認する手順
では、実際にpleiadesでSpring Bootアプリを起動し、設定の違いを確認してみましょう。手順は以下の通りです。
- application.propertiesにログ設定を追加する。
- プロジェクトを保存して、Gradleでビルドを実行する。
- アプリを起動し、コンソール出力を確認する。
まず、src/main/resources/application.propertiesに次の設定を記述します。
logging.level.root=INFO
logging.level.com.example.controller=DEBUG
次に、pleiadesの「実行」メニューからSpring Bootアプリを起動します。コンソールには次のような出力が表示されるはずです。
2025-10-25 11:40:30 INFO 11000 --- [ main] c.e.demo.DemoApplication : Starting DemoApplication
2025-10-25 11:40:32 DEBUG 11000 --- [nio-8080-exec-1] c.e.controller.HomeController : デバッグ用メッセージです。
このように、コントローラにだけDEBUGログが出ていれば、設定が正しく反映されています。
Spring Bootでは、設定ファイルを変えるだけで即座にログの出力内容を切り替えられるので、開発中に問題箇所を素早く特定できます。また、特定のパッケージだけを対象にすることで、不要なログのノイズを減らし、効率よくデバッグが行えます。
もしログが反映されない場合は、設定ファイルの場所やスペルミス(特にパッケージ名)を確認してみましょう。多くの場合、単純な記述ミスが原因です。
ログ設定の活用例
開発環境と本番環境でログレベルを切り替えるのもおすすめです。開発中はDEBUGで詳細を確認し、本番ではINFOかWARNにすることで、ログの量を抑えつつ重要な情報だけを残せます。
また、チーム開発では、複数人が同じアプリを触るため、共通のログ出力ルールを決めておくとよいでしょう。たとえば「コントローラ層はDEBUG、サービス層はINFO、例外処理はERROR」といった形です。こうすることで、誰が見ても理解しやすいログ出力になります。
Spring Bootのapplication.propertiesを使えば、これらの設定を簡単に変更でき、環境に応じた柔軟な運用が可能です。
7. 設定変更後の確認ポイント
ログレベルの設定を変更したあとに、正しく反映されているかを確認することはとても重要です。Spring Bootでは、コンソール出力を見ることで簡単にチェックできます。特に「どのログが出て、どのログが出ないか」を理解しておくと、デバッグ時に混乱せずに済みます。
たとえば、全体のログレベルをINFOにして、特定のクラスだけをDEBUGにした場合、INFO以上のログはすべて表示されますが、DEBUGログはその特定クラスだけに限定されます。つまり、com.example.controllerに属するクラスだけが詳細な情報を出力します。
実際にpleiadesでSpring Bootを実行してみると、次のようなコンソール出力になります。
2025-10-25 13:10:41 INFO 20000 --- [ main] c.e.demo.DemoApplication : Starting DemoApplication
2025-10-25 13:10:42 INFO 20000 --- [nio-8080-exec-1] c.e.controller.HomeController : ホーム画面を表示します。
2025-10-25 13:10:42 DEBUG 20000 --- [nio-8080-exec-1] c.e.controller.HomeController : デバッグ用メッセージです。
このように、同じクラス内でINFOとDEBUGの両方が出ている場合は設定が正しく反映されています。一方、DEBUGが出ていない場合は、設定に誤りがある可能性があります。
確認のポイントとしては次の三つです。
- application.propertiesが正しい場所(
src/main/resources)にあるか。 - 設定のキーが正しいか(
logging.level.で始まっているか)。 - パッケージ名やクラス名のスペルが完全一致しているか。
Spring Bootではパッケージ名の階層が正しく一致していないと、ログ設定が無視されることがあります。そのため、設定ファイルの文字列は正確に入力することが大切です。
また、設定を変更した場合は、必ずアプリを再起動してください。Spring Bootは起動時に設定を読み込むため、再起動しないと変更が反映されません。
8. よくあるトラブルと対処法
Spring Bootのログ設定はシンプルに見えますが、初心者がつまずきやすいポイントがいくつかあります。ここでは、代表的なトラブルとその解決方法を紹介します。
① 設定してもログレベルが変わらない
最も多い原因は「パッケージ名のスペルミス」です。たとえば、実際のクラスがcom.example.controllerなのに、logging.level.com.example.controllers=DEBUGと誤ってsを付けてしまうと、Spring Bootはその設定を無視します。
解決策としては、コントローラのソースファイルを開き、正確なパッケージ名をコピーして設定に貼り付けるのが確実です。
② 設定ファイルが読み込まれない
次に多いのが、application.propertiesの場所が間違っているケースです。Spring Bootが設定を自動で読み込むのはsrc/main/resourcesディレクトリだけです。それ以外の場所(たとえばルートフォルダやconfigフォルダ直下)に置いても反映されません。
また、同じプロジェクト内に複数のapplication.propertiesが存在していると、意図しない設定が読み込まれることがあります。複数ファイルがある場合は一度統一しましょう。
③ DEBUGログが多すぎて見づらい
DEBUGログを有効にすると、非常に多くのメッセージが出ることがあります。特に、logging.level.root=DEBUGのように全体をDEBUGにしてしまうと、Spring Bootの内部処理まで大量に出力されてしまいます。
この場合は、クラス単位で制御するのが効果的です。必要な箇所だけをDEBUGにすることで、ノイズの少ないログを確認できます。
④ 変更しても反映されない
pleiadesで開発している場合、保存しただけでは再ビルドが走らないことがあります。Gradleでプロジェクトをリフレッシュし、再度実行してください。キャッシュが残っている場合もあるため、一度クリーンビルドするのも有効です。
また、設定をコメントアウトして再起動し、再度戻して起動することでリロードされる場合もあります。Spring Bootはキャッシュを保持することがあるため、動作確認時は明示的に再起動するのが確実です。
9. ログレベル調整のコツ
Springアプリを運用する上で、ログの取り方にはいくつかのコツがあります。単に設定を変えるだけでなく、環境や目的に合わせて使い分けることで、より効果的にデバッグや監視が行えます。
① 環境ごとに設定を変える
開発環境では、できるだけ詳細なログを確認したいのでDEBUGを多く使います。一方で、本番環境ではINFOかWARNにするのが一般的です。本番ではパフォーマンスやセキュリティの観点から、余計な情報を出力しない方が安全です。
たとえば、次のように設定ファイルを切り替える方法もあります。
# 開発環境用
logging.level.root=INFO
logging.level.com.example.controller=DEBUG
# 本番環境用
# logging.level.root=WARN
pleiadesで環境ごとにプロファイルを切り替える場合は、application-dev.propertiesやapplication-prod.propertiesのようにファイルを分けるのも良い方法です。
② ログの粒度を意識する
すべてをDEBUGにしてしまうと情報過多になり、逆に重要なメッセージが埋もれてしまいます。コントローラ層ではユーザー操作の流れを、サービス層ではビジネスロジックの処理結果を、リポジトリ層ではSQLやデータ操作を、それぞれ必要なレベルで出すように意識しましょう。
③ 一時的なデバッグログの使い方
特定の問題を調査しているときだけ、一時的にDEBUGを有効にするのも効果的です。Spring Bootでは設定を変更して再起動するだけで切り替えられるため、常に全体の設定を変更する必要はありません。作業が終わったら元に戻しておくことで、不要なログを抑えられます。
④ ログ出力の整形と読みやすさ
ログの見やすさも重要です。Spring Bootのデフォルトログはシンプルですが、必要に応じてフォーマットを調整することもできます。たとえば、日時・スレッド・クラス名を表示しておくと、トラブル発生時の特定が容易になります。
application.propertiesには、次のような設定を追加することで出力形式をカスタマイズできます。
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
このようにしておくと、ログがより整った形で出力され、分析しやすくなります。特にチームで共有する場合には、このような統一感のあるフォーマットを設定しておくと便利です。
⑤ ログの量を管理する
Spring Bootアプリを長期間運用すると、ログファイルが肥大化してディスクを圧迫することがあります。そのため、DEBUGを長期間有効にするのは避け、本番環境ではINFO以上に設定しておくのが基本です。必要に応じてログローテーションの設定も検討しましょう。
以上のように、Spring Bootではapplication.propertiesを使ってクラス単位で柔軟にログレベルを設定できます。開発中はDEBUGで詳細を確認し、本番ではINFOやWARNにして安定した運用を目指しましょう。設定が反映されない場合も、パッケージ名や配置場所を見直せば多くの問題は解決できます。
ログは単なる出力情報ではなく、アプリの「健康状態」を知るための大切な指標です。クラス単位で適切に管理することで、効率的で安全な開発が実現できます。