Spring Bootのログ出力フォーマットを変更する方法|application.ymlでログ形式を設定する
新人
「先輩、Spring Bootのログって、いつもコンソールに出力されていますけど、あの形式って変更できるんですか?」
先輩
「いい質問だね。Spring Bootではログ出力のフォーマットを自由に変更できるよ。しかも、設定ファイルで簡単に管理できるんだ。」
新人
「設定ファイルって、application.ymlのことですか?」
先輩
「そう。application.ymlを使えば、コンソールやファイルに出力されるログの形式を細かく指定できるんだ。例えば、ログレベルやスレッド名、日付のフォーマットを変えることもできるよ。」
新人
「なるほど!でも、そもそもログフォーマットって何を意味しているんですか?」
先輩
「それをこれから詳しく説明するよ。ログの出力フォーマットを理解すると、Spring Bootのデバッグや運用がぐっと楽になるんだ。」
1. Spring Bootのログ出力フォーマットとは?
Spring Bootのログ出力フォーマットとは、ログを出力するときの「表示の形」を決める仕組みです。例えば、実行時にターミナル(コンソール)に表示されるログには、日時、ログレベル、スレッド名、クラス名、メッセージなどが並んでいます。
Spring Bootでは、内部的にLogbackというロギングライブラリを使っています。これにより、application.ymlやlogback-spring.xmlを使って、出力形式を自由に変更できます。
通常、初期設定では以下のような形式でログが表示されます。
2025-10-08T10:15:42.123+09:00 INFO 12345 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 2.345 seconds
このように、日時やログレベル(INFO、DEBUGなど)、スレッド名、クラス名が出力されています。この並び順や書式を変更することで、チームの開発スタイルや運用環境に合わせた最適なログ出力が可能になります。
たとえば、開発中は短く見やすく、本番環境では詳細なログを残すなど、Spring Boot ログ設定を工夫することで、効率的なトラブルシューティングができます。
2. 出力フォーマットを変更する目的と活用シーン
ログフォーマットを変更する目的は、開発中のデバッグ効率を上げたり、システム運用時の問題解析をしやすくするためです。特に、複数のスレッドや複数ユーザーが同時に動くアプリケーションでは、ログを見やすく整理することが非常に重要です。
たとえば、開発環境では「短く簡潔なログ」、本番環境では「詳細なエラー情報を含むログ」が望ましいケースが多いです。これをSpring Bootのapplication.ymlで簡単に切り替えることができます。
また、ログ出力 ファイル保存を併用すれば、あとで発生した問題を振り返る際にも役立ちます。Spring Bootは、コンソール出力とファイル出力の両方に対応しており、同じフォーマット設定を使って統一的に管理できます。
以下は、ログフォーマットを変更する一例です。たとえば、ログの出力内容を「日付、レベル、メッセージ」だけにシンプル化したい場合、application.ymlで次のように指定できます。
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%level] %msg%n"
これにより、Spring Bootのログ出力が次のような簡潔な形式になります。
2025-10-08 10:20:01 [INFO] アプリケーションが起動しました
このようにログを整理することで、必要な情報だけを素早く確認できるようになります。
特に、application.yml ログ形式を使った設定は、初心者でも扱いやすく、Spring Bootのプロジェクト全体に簡単に反映できるのが特徴です。
pleiades+Gradle環境でも同様に動作し、IDE上で設定を変更すれば即時にログ出力形式が変わるので、試しながら学ぶのに最適です。
次のステップでは、実際に@Controllerクラスでログを出力して、フォーマットの違いを体感していくとよいでしょう。
3. application.ymlでログフォーマットを設定する方法
ここからは、実際にSpring Bootのapplication.ymlファイルを使ってログフォーマットを変更する具体的な設定方法を見ていきましょう。Spring Bootではlogging.pattern.consoleとlogging.pattern.fileというキーを使って、コンソール出力とファイル出力の形式を指定できます。
pleiades環境でGradleプロジェクトを開いている場合は、src/main/resourcesディレクトリ内にあるapplication.ymlを編集すればOKです。次の例では、日時、ログレベル、スレッド名、メッセージを整った形で出力する設定を行っています。
logging:
file:
name: logs/sample.log
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
この設定では、コンソールとファイルの両方で同じフォーマットを使用しています。各部分の意味を整理すると次のようになります。
- %d:日時を出力します。形式を指定することで、年月日や時刻の形を自由に調整できます。
- %thread:実行しているスレッド名を出力します。
- %-5level:ログレベル(INFO、DEBUGなど)を左寄せ5文字で出力します。
- %logger{36}:クラス名を36文字以内で出力します。
- %msg:実際のログメッセージを出力します。
- %n:改行を意味します。
このように、Spring Bootではapplication.ymlの設定だけで詳細なログフォーマットを変更できます。わざわざXML形式のLogback設定ファイルを作らなくても、軽量な管理が可能です。
また、開発環境と本番環境でフォーマットを変えたい場合は、application-dev.ymlやapplication-prod.ymlを用意し、プロファイルごとに異なる設定を適用することもできます。これにより、開発時は短いログ、本番では詳細な情報を残す運用が簡単に実現できます。
4. ログ出力形式のカスタマイズ例(日時・スレッド名・ログレベルなど)
次に、Spring BootのLogback pattern 設定をさらにカスタマイズしてみましょう。実際の業務では、アプリケーションの種類や開発チームの方針に合わせてログの見た目を調整することがよくあります。
例えば、システムの状態をより詳細に把握したい場合は、以下のようにプロセスIDやクラス名、メッセージの区切りをカスタマイズして見やすくすることができます。
logging:
pattern:
console: "%d{HH:mm:ss.SSS} | %pid | [%thread] | %-5level | %logger{20} | %msg%n"
このようなフォーマットにすると、ログが次のように表示されます。
10:45:12.567 | 12345 | [main] | INFO | c.e.demo.controller.HomeController | コントローラが呼び出されました
このように「区切り文字」をうまく使うと、複数の情報を視覚的に分かりやすく整理できます。特にスレッドを多用するアプリケーションや複数のAPIを同時に動かすWebシステムでは、どの処理がどのスレッドで動いているかを確認するのに便利です。
もう一つの例として、日時をISO形式で統一するパターンもあります。これはログ解析ツールとの連携を考慮する場合に有効です。
logging:
pattern:
console: "%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} [%level] %logger{36} - %msg%n"
ISO形式の日時(例:2025-10-08T10:45:12.567+09:00)は、ログ分析システムや外部監視ツールでも正確に時刻を扱えるため、運用チームに好まれています。
Spring Bootのapplication.yml ログ出力設定は柔軟で、こうしたカスタマイズをコードを一行も書かずに実現できるのが大きな魅力です。
5. 実際にフォーマット変更を確認する手順(pleiadesのコンソール出力との違い)
では、実際にpleiades環境でログフォーマットの変更が反映されているかを確認してみましょう。まずは簡単な@Controllerクラスを作成して、ログを出力してみます。
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LogFormatController {
private static final Logger logger = LoggerFactory.getLogger(LogFormatController.class);
@GetMapping("/logtest")
public String testLog() {
logger.info("ログフォーマット変更テスト:INFOレベルのメッセージです");
logger.debug("ログフォーマット変更テスト:DEBUGレベルのメッセージです");
logger.error("ログフォーマット変更テスト:ERRORレベルのメッセージです");
return "log";
}
}
このクラスを実行し、ブラウザでhttp://localhost:8080/logtestにアクセスすると、コンソールに設定したフォーマット通りのログが出力されます。たとえば、先ほど設定したapplication.ymlのパターンを使用していれば、次のような結果になります。
2025-10-08 10:55:23 [main] INFO com.example.demo.controller.LogFormatController - ログフォーマット変更テスト:INFOレベルのメッセージです
2025-10-08 10:55:23 [main] DEBUG com.example.demo.controller.LogFormatController - ログフォーマット変更テスト:DEBUGレベルのメッセージです
2025-10-08 10:55:23 [main] ERROR com.example.demo.controller.LogFormatController - ログフォーマット変更テスト:ERRORレベルのメッセージです
このように、pleiadesのコンソール出力に変更が反映されれば設定は成功です。また、logs/sample.logファイルを開くと、同じフォーマットで記録されていることが確認できます。
もしログが思った通りに表示されない場合は、設定ファイルのインデントやコロン(:)の位置に誤りがないかを確認してください。YAMLは空白の数が構文エラーにつながることがあるため注意が必要です。
ここまでの手順を通じて、Spring Bootのapplication.ymlを使えば、コンソール出力もファイル出力も同じように統一されたフォーマットで管理できることが分かりました。これにより、ログ解析の効率が向上し、チーム全体でログの見方をそろえることができます。
さらに、Gradleでビルドしたアプリケーションをサーバーにデプロイする場合も、同じ設定がそのまま適用されるので、環境の違いを意識せずに一貫したログ運用が可能です。
6. よくある設定ミスとトラブル対処法
Spring Bootでログフォーマットを変更する際に、初心者がよくつまずくポイントはいくつかあります。まず最も多いのは、application.ymlのインデントミスです。YAML形式は空白の数が構文として扱われるため、スペースのずれが原因で設定が反映されないことがあります。
例えば、logging:の下にあるpattern:やfile:の位置がずれていると、Spring Bootはそれを無視してしまいます。その結果、デフォルトのフォーマットが適用され、「設定が効いていない」と誤解するケースが多いのです。
また、ログファイルの出力先を指定する際には、パスの存在にも注意が必要です。たとえば次のように設定した場合、指定ディレクトリが存在しないとファイルが作成されないことがあります。
logging:
file:
name: logs/sample.log
このような場合は、logsフォルダを手動で作成してからアプリケーションを起動してください。pleiades環境では、プロジェクト直下にフォルダを作るだけで自動的に認識されます。
もうひとつの注意点は、プロファイルごとの設定競合です。たとえば、application.ymlとapplication-dev.ymlの両方に同じキーが存在する場合、アクティブプロファイルによってどちらか一方しか反映されません。もし設定変更がうまくいかないときは、spring.profiles.activeの値を確認しましょう。
最後に、ログレベルが影響して出力されないケースもあります。たとえばlogger.debug()を使っても、application.ymlのレベル設定がINFOになっていると表示されません。デバッグ確認時は、次のようにレベルを下げておくと便利です。
logging:
level:
root: DEBUG
これらのポイントを理解しておくと、設定変更時のトラブルをスムーズに解決できます。
7. 環境ごとにログフォーマットを切り替える方法(開発/本番)
Spring Bootでは、開発環境と本番環境で異なるログフォーマットを使い分けることができます。これは非常に便利な仕組みで、たとえば開発時には見やすく簡潔なログ、本番環境では詳細な情報を含むログにするなど、目的に合わせて切り替えることができます。
この切り替えは、プロファイル機能を利用して実現します。Spring Bootでは、application-dev.ymlやapplication-prod.ymlのようにファイルを分けておき、起動時にspring.profiles.activeを指定するだけで自動的に切り替わります。
# application.yml
spring:
profiles:
active: dev
# application-dev.yml(開発用)
logging:
pattern:
console: "%d{HH:mm:ss} [%level] %msg%n"
# application-prod.yml(本番用)
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
file:
name: logs/app-prod.log
開発用の設定では短くて読みやすいフォーマットに、本番用では詳細な情報とファイル出力を追加しています。このようにしておくと、開発中に冗長な情報を避けつつ、本番では問題発生時に十分な手がかりを得られるようになります。
pleiadesで実行する場合、Run ConfigurationsのVMオプションに-Dspring.profiles.active=prodと指定すれば、簡単に本番設定で起動できます。Gradleビルド時にも同じ指定を行えば、デプロイ先で自動的に適用されます。
このように環境ごとにログフォーマットを切り替えることで、開発効率と運用の信頼性の両方を確保できます。特に本番環境では、エラー検出や監視システムとの連携を考慮して、ISO形式の日付やスレッド名を明示しておくことをおすすめします。
8. @Controllerでのログ出力とフォーマット変更の組み合わせ例
ここでは、実際に@Controllerを使ってログを出力し、Spring Boot ログフォーマット 設定の効果を確認する例を見てみましょう。以下のようなサンプルを作成しておくと、pleiadesのコンソールとログファイル両方で動作を確認できます。
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LogExampleController {
private static final Logger logger = LoggerFactory.getLogger(LogExampleController.class);
@GetMapping("/format")
public String formatTest() {
logger.info("フォーマット確認テスト:INFOレベル");
logger.debug("フォーマット確認テスト:DEBUGレベル");
return "log";
}
}
このコントローラを実行すると、設定したapplication.ymlのフォーマットがそのまま適用されます。特にlogging.pattern.consoleを短く設定しておけば、pleiadesの出力ウィンドウでもスッキリとしたログを確認できます。
もし本番環境でこのアプリケーションを動かす場合、logging.file.nameを指定しておくことで、ファイルにも同じフォーマットのログが保存されます。これにより、アプリケーションの実行履歴を後から確認することができ、障害対応の際にも非常に役立ちます。
さらに、ログメッセージの中でプレースホルダを使うことも可能です。たとえば、ユーザー名や処理IDをログに含めたい場合、次のように書けます。
logger.info("ユーザー{}が処理{}を実行しました", userName, processId);
これにより、出力フォーマットに従って動的な情報を整った形で記録できるため、分析や監査にも活用できます。特に複数ユーザーがアクセスするWebアプリケーションでは、誰がいつどの処理を行ったのかを明確に残すことが重要です。
また、ログ出力のタイミングや粒度を適切に設計することも大切です。たとえば、アクションメソッドの入り口と出口、例外発生箇所などにポイントを絞って出力することで、必要な情報を効率的に取得できます。フォーマットを整えることで、同じログでも視認性が向上し、問題発生時の特定が早くなります。
Gradle環境での実行時にも設定はそのまま反映されるため、ビルド後のJARファイルをサーバーに配置しても同様のログが生成されます。これにより、pleiades上で試した設定をそのまま運用環境に持ち込むことができるのです。
このように、Spring Bootではapplication.yml Logback patternの指定によって、コードを一切変更せずにログ出力の見た目と内容を柔軟にカスタマイズできます。開発と運用の両面で役立つこの設定は、初期段階でしっかり理解しておくと後々のメンテナンスが格段に楽になります。