Spring Bootログ設計入門|ログレベルと本番運用の基本

アプリケーションのログを読んだことはありますか?

多すぎるログは読まれなくなり、少なすぎるログは原因調査を難しくしてしまいます。

  • ログが大量に出ていて重要な情報が埋もれてしまう
  • ログが少なすぎ、障害の原因がわからない

こうした問題は、ログの量ではなく ログの設計 を意識することで改善できます。

この記事では、Spring Bootのログの基本について解説していきます。

目次

ログレベルの基本

ログレベルは「重要度」を表していて、Spring Bootでは以下のようなレベルが使われます。
上から順に重要度が高くなります。

ERROR

処理が失敗した場合など、明確な異常が発生したときのログです。例外が発生した場合はこのレベルで出力します。

WARN

処理は継続できるものの、想定外の状態が発生している場合に出力します。
将来的に問題につながる可能性がある状況です。

INFO

アプリケーションの通常動作を示すログです。
起動処理や重要な業務処理の開始・終了など、運用時に確認したい情報を出力します。

DEBUG

開発時の調査用ログです。処理の流れや変数の値など、詳細な情報を確認したいときに使用します。

TRACE

DEBUGよりさらに詳細なログです。メソッドの呼び出し順序など、かなり細かい処理の追跡に使われます。

重要なのは、ログレベルを「情報の量」ではなく 重要度 で決めることです。
INFOやDEBUGを乱用すると、本当に重要なログが埋もれてしまいます。

Spring Bootのログ設定

Spring Bootでは、デフォルトでLogbackがログライブラリとして使用されます。
特別な設定をしなくても、コンソールにログが出力される状態になっています。

ログレベルは application.yml で変更できます。

logging:
  level:
    root: INFO

この設定では、アプリケーション全体のログレベルをINFOに設定しています。

特定のパッケージだけログレベルを変更することもできます。

logging:
  level:
    root: INFO
    com.example.service: DEBUG

この場合、アプリ全体はINFOですが、com.example.service パッケージだけDEBUGログが出力されます。

この設定は、開発時の調査で特定のパッケージだけ詳細ログを見たいときに便利です。

ログレベルを必要な範囲だけ変更することで、不要なログを増やさずに調査を進めることができます。

実務で使えるログ設計

実務では、ログは「あとから原因を調べるための情報」として設計します。
そのため、ログは単なるメッセージではなく 状況を再現できる情報 を残すことが重要です。

まず基本になるのは、例外ログの出力です。

try {
    service.process(order);
} catch (Exception e) {
    log.error("注文処理に失敗しました。orderId={}", order.getId(), e);
}

例外ログでは、次の2つを必ず残します。

処理内容。
調査に必要な識別情報(IDなど)。

メッセージだけでは、どのデータで失敗したのか分かりません。
IDなどの情報を含めることで、後からデータを追跡できます。

また、ログは文章よりも「状況」を意識して書くと調査しやすくなります。

たとえば次のログは、情報が少なく調査が難しくなります。

ログイン処理を実行しました

一方で、次のようなログなら状況が分かります。

ユーザーログイン処理 userId=123

ログは、あとから読む人が「何が起きたか」を理解できる形で書くことが大切です。

本番環境では、DEBUGログを常に出すことはあまりありません。
DEBUGログは情報量が多いため、本番で出し続けるとログが膨大になります。

一般的には通常運用はINFO、調査時のみ特定パッケージをDEBUGに変更するケースが多いです。

Spring Bootではログレベルを設定で変更できるため、必要なときだけ詳細ログを出す運用が可能です。

ログは多ければよいわけではなく、必要なときに必要な情報を取り出せること が重要です。

まとめ

ログは単なる出力ではなく、運用と調査のための重要な情報です。
そのため、ログレベルの意味を理解し、重要度に応じて適切に使い分けることが大切です。

Spring Bootでは application.yml でログレベルを簡単に変更できるため、
通常はINFOで運用し、必要なパッケージだけDEBUGを有効にする方法がよく使われます。

ログメッセージには処理内容だけでなく、IDなどの識別情報を含めることで、あとから原因を追いやすくなります。

ログ設計を意識しておくことで、障害発生時の調査や運用が大きく楽になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次