コンテンツにスキップ

ログ出力方針⚓︎

概要編では、一般的なログの種類とログレベルを定めます。 アプリケーション形態ごとに個別に検討が必要なものについては別途定めます。 アプリケーション形態別のアプリケーションアーキテクチャ解説も、あわせて参照してください。

ログの種類⚓︎

AlesInfiny Maia OSS Edition (以降、 AlesInfiny Maia)で定義するログの種類は以下の通りです。

  • 操作ログ

    ユーザーの操作履歴や、アプリケーションに対して行った操作を記録するログを操作ログと呼びます。

  • 通信ログ

    アプリケーションがネットワークを介して通信する際、送受信する業務データや、送信先の情報、ヘッダー情報等を記録するログを通信ログと呼びます。

  • 監査ログ

    アプリケーションの持つデータに対して行われた CRUD 処理を、誰がいつ実行したか記録するログを監査ログと呼びます。

  • アプリケーションログ

    ここまでのログの種類に該当しない、アプリケーションのロジック内から出力する汎用的なログをアプリケーションログと呼びます。

ログレベル⚓︎

出力するログには、ログを出力する業務処理内で指定したログレベルを付与します。 ログに出力する情報によって、適切なログレベルを選択します。 ログレベルの定義は以下の通りです。

  • FATAL

    業務の即時停止につながる可能性のあるログを出力するときに使用するログレベルです。

  • ERROR

    一部の業務が停止する可能性のあるログを出力するときに使用するログレベルです。 マスターデータの不整合や、原因の不明なエラー発生など、システム運用担当者による確認や対処が必要となる状態を通知する目的に使用します。

  • WARN

    業務は継続できるものの、一時的に発生したエラー状態を出力するときに使用するログレベルです。 業務エラーの記録など、システム運用担当者による対応は不要なものの、システムとして不安定な状態を記録する際使用します。

  • INFO

    システム運用にあたって必要となる情報を出力するときに使用するログレベルです。 バッチ処理の開始/終了の記録など、システムの状態を記録する際使用します。

  • DEBUG

    開発者がアプリケーションの開発のために使用するログレベルです。 各メソッドの入出力データなど、開発目的の情報を記録する際使用します。

ログレベルと環境ごとの出力設定⚓︎

システムの実行環境にあわせて、適切なレベルのログを出力するように構成します。

ログレベル 本番環境 テスト環境 ローカル開発環境
FATAL ✅ ✅ ✅
ERROR ✅ ✅ ✅
WARN ✅ ✅ ✅
INFO ✅ ✅ ✅
DEBUG ✅

ログに含める標準データ⚓︎

以下の情報をログに含めます。

  • ログ出力日時
  • ログレベル
  • メッセージ
  • プロセス ID
  • スレッド名
  • 例外メッセージとスタックトレース ( 例外を記録するログのみ )

プロセス ID とスレッド名の用途

プロセス ID とスレッド名は主にバッチのログをトレースするために出力します。 複数のバッチが同時に動作、また複数のスレッドの処理が同時に動作しながらログ出力すると、各処理で出力したログが混ざりあった状態のログができあがります。 プロセス ID はバッチの実行単位で出力したログだけをフィルタリングして、処理ごとにログを分解して解析するために使用できます。 スレッド名は、 1 つのスレッド内で出力したログだけをフィルタリングして、処理ごとにログを分解して解析するために使用できます。 マルチスレッドプログラミングを行うなど、スレッド名だけではログのトレースが実現できない場合は、別途ログをトレースするための手段を検討します。

ロギングライブラリ⚓︎

AlesInfiny Maia では、 Java アプリケーションのロギングライブラリとして Apache Log4j 2 (以降 log4j2 )を使用します。 またロギングファサードとして SLF4J を使用します。

ログの設定ファイル⚓︎

log4j2 では、設定ファイルを使用しログの動作を制御します。

ログの設定ファイルは、以下の形式をサポートしています。 なお、 AlesInfiny Maia では、ログの設定ファイルに XML 形式を採用しています。

  • XML
  • JSON
  • YAML
  • Properties

また、 AlesInfiny Maia はマルチプロジェクト構成を採用しています。 エントリーポイントとなるサブプロジェクトが複数ある場合、それぞれでログ形式を定めることが考えられます。

そのため、以下のようにログの設定ファイルをエントリーポイントとなる各プロジェクトに配置します。

root/ ------------------------------------------- root フォルダー
 ├ webapp1/ ------------------------------------- エントリーポイントとなるサブプロジェクト 1
 │ └ src/main/resource/ ------------------------- 設定ファイルを一元管理するフォルダー
 │    └ log4j2.xml ------------------------------ ログの設定ファイル
 └ webapp2/ ------------------------------------- エントリーポイントとなるサブプロジェクト 2
   └ src/main/resource/ ------------------------- 設定ファイルを一元管理するフォルダー
      └ log4j2.xml ------------------------------ ログの設定ファイル

log4j2.xml の具体的な設定については、こちら を確認してください。