Spring Bootのログ設定入門|ログ出力をファイルに保存する基本設定を学ぼう
新人
「先輩、Spring Bootのログって、いつもコンソールに出ていますけど、あれをファイルに保存することもできるんですか?」
先輩
「もちろんできるよ。Spring Bootではapplication.ymlの設定で簡単にログ出力先を変更できるんだ。コンソール出力だけでなく、ファイル保存の設定もよく使うよ。」
新人
「なるほど!でも、コンソールでも見られるなら、わざわざファイルに出す必要があるんですか?」
先輩
「開発中はコンソールで十分だけど、運用中はアプリが止まったあとに過去の動作を確認することがあるんだ。ファイル保存はそのときにとても役立つんだよ。」
1. Spring Bootのログ出力の仕組み(コンソールとファイルの違い)
Spring Bootでは、起動時から自動的にログが出力されるように設定されています。特に何も設定しなくても、org.springframework.bootが内部でLogbackという仕組みを使い、コンソールにログを出力しています。
この「コンソール出力」は開発中にエラーを素早く見つけるのに便利ですが、アプリを長時間動かす運用環境では記録が残らないという欠点があります。そこで、ログをファイルに出力しておくことで、後から動作状況を確認できるようになります。
設定はとても簡単で、Spring Bootのプロジェクトにあるapplication.ymlを編集するだけです。pleiadesで作成したGradle構成のプロジェクトなら、下記のような設定を追加します。
logging:
file:
name: logs/app.log
level:
root: INFO
この設定では、ログをlogs/app.logというファイルに出力し、ルートレベルをINFOに指定しています。これで、アプリケーションの標準ログがファイルとして保存されます。ファイルは自動的に作成され、コンソール出力も同時に継続されます。
また、logging.pattern.fileを使うことで、出力形式(日時やログレベルの書き方)を変更することもできます。例えば、日付付きで保存したい場合や、フォーマットを統一したい場合に便利です。
2. ログをファイルに保存するメリットと用途
ログをファイルに保存する最大のメリットは、アプリの履歴を残せることです。アプリケーションが正常に動いているか、いつどんなエラーが起きたのかを後から確認できるのは非常に重要です。
例えば、ユーザーから「昨日の夜、画面が動かなかった」と報告があったとき、ファイルに保存されたログを見れば、どの時刻にどんな例外が発生したのかをすぐに突き止められます。
さらに、Spring Bootではログのローテーション(古いログの自動削除)も簡単に設定できます。下記のようにapplication.ymlに追記します。
logging:
file:
name: logs/springboot-app.log
logback:
rollingpolicy:
max-history: 7
max-file-size: 10MB
この設定を入れると、ログファイルが7日分まで保持され、1ファイルの上限が10MBを超えると自動的に次のファイルに切り替わります。これにより、ログが肥大化してディスク容量を圧迫するのを防げます。
ログファイルを活用すれば、開発者だけでなく運用チームも安心してシステムを監視できます。また、後でElasticsearchやGrafanaといったログ分析ツールに取り込むこともでき、長期的なトレースにも役立ちます。
このように「Spring Boot ログ設定」を正しく行い、「ログ出力 ファイル保存」を意識しておくことで、安定したシステム運用が実現できます。
3. application.ymlでログファイルを設定する方法
ここからは実際に、Spring Bootで「ログ出力 設定」を行う手順を見ていきましょう。設定ファイルとして使うのはapplication.ymlです。pleiadesでGradle構成のプロジェクトを作成すると、src/main/resourcesにこのファイルが自動で生成されます。
このファイルにログ設定を追加することで、Spring Bootが内部的に使っているLogbackの動作を簡単に制御できます。ログの出力先をファイルに変更したり、出力レベルやフォーマットを調整したりすることが可能です。
では、まず基本となる設定例を見てみましょう。
logging:
file:
name: logs/myapp.log
level:
root: INFO
pattern:
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
この設定では、ログをlogs/myapp.logという名前のファイルに出力し、ログレベルをINFOに設定しています。パターン部分では、ログの出力形式を日時・スレッド名・レベル・メッセージといった順に指定しています。
ここで注意すべきポイントは、ファイルパスの指定です。logs/のように相対パスで指定した場合は、プロジェクトのルートディレクトリ(実行ディレクトリ)にフォルダが自動作成されます。もし絶対パスで指定したい場合は、次のように書くことも可能です。
logging:
file:
name: "C:/pleiades/workspace/demo/logs/myapp.log"
Windows環境のようにドライブ名を含めるときは、パス区切りに注意しましょう。特にpleiades環境では実行フォルダがプロジェクトルートに設定されるため、相対パスを使う方が安全でわかりやすいです。
4. ログファイルの出力先とローテーション(サイズ・日付での分割)
Spring Bootでは、ログファイルを一定のサイズや日付で自動的に分割する「ローテーション」機能が用意されています。これを設定することで、ログが無限に増えてディスク容量を圧迫することを防げます。
このローテーション設定は、logging.logback.rollingpolicyの項目を使って指定します。たとえば、ファイルサイズが10MBを超えたら新しいログに切り替え、7日分だけ保持する場合は次のようにします。
logging:
file:
name: logs/spring-log-demo.log
logback:
rollingpolicy:
max-file-size: 10MB
max-history: 7
total-size-cap: 100MB
この設定の意味を整理すると、
- 1ファイルあたりの最大サイズは
10MB - 過去7日分のログファイルを保持
- 全体で最大100MBを超えたら古いログを削除
となります。これにより、運用中のシステムでもログを安心して管理できます。
さらに、日付ごとにログファイルを分けたい場合は、ファイル名に日付を付与する設定も可能です。たとえば次のように指定すると、日ごとに別のログファイルが生成されます。
logging:
file:
name: logs/daily-app.log
logback:
rollingpolicy:
file-name-pattern: "logs/daily-app-%d{yyyy-MM-dd}.log"
これで、logs/daily-app-2025-10-01.log、logs/daily-app-2025-10-02.logのように日付付きファイルが作成されます。運用で日別ログを追跡する際にとても便利です。
「Logback 設定」を細かく調整することで、開発・テスト・本番それぞれの環境に最適なログ出力を実現できます。特にファイルサイズや日付での管理は、システム運用では欠かせないポイントです。
5. 実際にファイル出力を確認する手順(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 LogTestController {
private static final Logger logger = LoggerFactory.getLogger(LogTestController.class);
@GetMapping("/log-test")
public String testLogging() {
logger.info("Spring Boot ログ出力 設定のテストです。");
logger.warn("警告レベルのログ出力を確認します。");
logger.error("エラーレベルのログ出力もテストします。");
return "index";
}
}
pleiadesでプロジェクトを実行し、ブラウザからhttp://localhost:8080/log-testにアクセスしてみてください。コンソールにはログが表示されますが、同時に設定したフォルダ内にもログファイルが作成されているはずです。
たとえば、logs/myapp.logを開くと、次のような内容が記録されています。
2025-10-08 10:15:02 [http-nio-8080-exec-1] INFO com.example.demo.controller.LogTestController - Spring Boot ログ出力 設定のテストです。
2025-10-08 10:15:02 [http-nio-8080-exec-1] WARN com.example.demo.controller.LogTestController - 警告レベルのログ出力を確認します。
2025-10-08 10:15:02 [http-nio-8080-exec-1] ERROR com.example.demo.controller.LogTestController - エラーレベルのログ出力もテストします。
コンソール上では同じログが表示されますが、pleiadesのコンソールはアプリ終了時にログが消えてしまうことがあります。一方、ファイルに出力しておけば、アプリを停止しても内容が残るので、後からじっくり調査できます。
また、ローテーション設定を有効にしていれば、一定サイズを超えると自動的に新しいファイルが作られます。その際、古いログはバックアップとして残り、ファイル名に.1や.2025-10-08のようなサフィックスが付与されます。
これで、Spring Bootの「ログファイル 保存先」と「Logback 設定」を組み合わせて、安定したログ管理が実現できました。開発中のコンソール出力と本番運用でのファイル出力をうまく使い分けることで、トラブル対応力が大きく向上します。
6. ログ出力設定でよくあるトラブルと対処法
Spring Bootでログファイル出力を設定した際、初心者が最初につまずきやすいのが「ログがファイルに出力されない」という問題です。原因の多くは、application.ymlの記述ミスや、ファイルパスの指定が誤っているケースです。
まず確認すべきは、インデントとコロンの位置です。YAMLファイルではインデントのズレが致命的なエラーになります。たとえばlogging:の下にあるfile:やlogback:がずれていると、設定が無効になります。pleiades上では見た目がずれていなくても、スペースとタブの混在でエラーになることがあるため注意しましょう。
次に、ファイル出力先のパスです。特にWindows環境でよくあるのが、パスに存在しないフォルダを指定しているパターンです。logs/フォルダは自動生成されることが多いですが、パーミッション設定やパスの誤りで作成されないこともあります。出力先を相対パスで指定し、アプリ起動時に実際にフォルダが作られているかを確認しましょう。
また、「Spring Boot ログファイル 出力」でエラーが出ないのにファイルが生成されない場合は、ログレベルの指定が影響している可能性があります。たとえば、root: INFOに設定しているのに、コードでlogger.debug()を呼び出しても出力されません。レベルの整合性を確認しておきましょう。
さらに、Logbackの設定を拡張したlogback-spring.xmlを同時に配置している場合、application.ymlの設定が上書きされることがあります。Spring BootではYAML設定とXML設定の両方をサポートしていますが、同時使用は避けるのが安全です。
最後に、pleiades環境では実行構成がGradle経由になっていることを確認してください。Gradleタスクではなく、単純にJavaアプリとして実行すると、相対パスの解釈が異なり、ログファイルが意図しない場所に出力されることがあります。
7. 実践的なログ運用のポイント(開発環境と本番環境の切り替え)
実際の開発現場では、開発環境と本番環境でログの出力先やレベルを変えるのが一般的です。Spring Bootではapplication.ymlをプロファイルごとに分けることで、環境別のログ設定を簡単に切り替えられます。
たとえば、開発用にapplication-dev.yml、本番用にapplication-prod.ymlを用意し、それぞれでログ設定を変えます。以下はその例です。
# application-dev.yml(開発環境)
logging:
file:
name: logs/dev-app.log
level:
root: DEBUG
# application-prod.yml(本番環境)
logging:
file:
name: /var/log/myapp/prod-app.log
level:
root: INFO
logback:
rollingpolicy:
max-history: 30
total-size-cap: 500MB
このように分けておくと、開発中は細かいログを確認でき、本番ではINFOレベル以上のみを保存するようにできます。本番環境ではログファイルが肥大化しやすいため、rollingpolicyを必ず設定しておくのがポイントです。
環境の切り替えは、application.ymlでspring.profiles.activeを指定することで行えます。
spring:
profiles:
active: prod
これにより、起動時に自動的にapplication-prod.ymlが適用されます。pleiadesから実行する場合も、この設定を有効にしておけば、本番と同じログ出力挙動をローカルで確認できます。
特にGradle環境では、ビルド後に生成されるJARファイルをサーバー上で実行するケースが多いため、ファイルパスを相対ではなく絶対指定にするなど、運用を想定した設計が重要です。相対パスを指定する場合は、起動スクリプトでカレントディレクトリを制御するようにしましょう。
また、本番環境ではセキュリティ上の理由でデバッグログを無効にするのが一般的です。誤って個人情報やパスワードがログに出力されないように、logger.debug()の内容には十分注意しましょう。
8. @Controllerでのログ出力とファイル保存の組み合わせ例
最後に、実際の@Controllerクラスでログを出力し、ファイル保存を確認する例を見てみましょう。Spring BootではLoggerFactoryを使ってクラス単位でロガーを作成し、業務処理の重要な部分にログを残すのが基本です。
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;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
@Controller
public class FileLogController {
private static final Logger logger = LoggerFactory.getLogger(FileLogController.class);
@GetMapping("/user-log")
public String userAction(@RequestParam(required = false) String name, Model model) {
logger.info("ユーザー操作を検知しました。");
if (name != null && !name.isEmpty()) {
logger.info("アクセスユーザー名: {}", name);
} else {
logger.warn("ユーザー名が指定されていません。");
}
try {
int result = 10 / 2;
logger.debug("計算結果: {}", result);
} catch (Exception e) {
logger.error("処理中に例外が発生しました。", e);
}
model.addAttribute("username", name);
return "userLog";
}
}
このクラスでは、ユーザー名を取得してログに出力し、処理の途中で例外が発生した場合にもログを残しています。logger.info()やlogger.error()など、レベルごとに使い分けることで、ファイル出力時にも見やすく整理されたログを記録できます。
設定したapplication.ymlでログファイルを指定していれば、pleiadesで実行した際にも自動的にそのファイルに出力されます。特にINFO以上のログは運用監視でよく使われるため、業務ロジックの開始・終了・例外発生時には積極的に記録するのがよい習慣です。
また、Spring BootではLoggerFactoryを使えば、クラス単位で簡単にロガーを定義できるため、「ログ設定 トラブルシューティング」の観点からも一貫した出力を保ちやすくなります。ログメッセージにプレースホルダー({})を使うと、文字列連結の手間を省き、パフォーマンスも向上します。
さらに、運用チームと連携する場合は、ログファイル名や出力形式を統一しておくことが重要です。たとえば、日時を含むファイル名パターンを設定しておくと、日別のログ確認が容易になります。これにより、「application.yml ファイル出力」の設定が効果的に活かされます。
このように、Spring Bootのログ出力は単なるメッセージ表示にとどまらず、アプリケーション全体の信頼性を支える重要な基盤になります。正しく設定し、@Controllerからの出力を活用することで、開発段階から本番運用までスムーズに対応できるようになります。