Tip

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

ロガー

NocoBaseは、pino をベースにした高性能なロギングシステムを提供しています。context を利用できる場所であればどこでも、ctx.logger を通じてロガーインスタンスを取得し、プラグインやシステムの実行中に重要なログを記録できます。

基本的な使い方

// 致命的なエラーを記録します(例:初期化の失敗)
ctx.logger.fatal('アプリケーションの初期化に失敗しました', { error });

// 一般的なエラーを記録します(例:APIリクエストのエラー)
ctx.logger.error('データの読み込みに失敗しました', { status, message });

// 警告情報を記録します(例:パフォーマンスのリスクやユーザー操作の異常)
ctx.logger.warn('現在のフォームには未保存の変更が含まれています');

// 一般的な実行情報を記録します(例:コンポーネントの読み込み完了)
ctx.logger.info('ユーザープロファイルコンポーネントの読み込みが完了しました');

// デバッグ情報を記録します(例:状態の変化)
ctx.logger.debug('現在のユーザーの状態', { user });

// 詳細なトレース情報を記録します(例:レンダリングフロー)
ctx.logger.trace('コンポーネントのレンダリングが完了しました', { component: 'UserProfile' });

これらのメソッドは、異なるログレベル(重要度が高い順)に対応しています。

レベルメソッド説明
fatalctx.logger.fatal()致命的なエラー。通常、プログラムの終了を引き起こします。
errorctx.logger.error()エラーログ。リクエストまたは操作の失敗を示します。
warnctx.logger.warn()警告情報。潜在的なリスクや予期せぬ状況を知らせます。
infoctx.logger.info()通常の実行情報。
debugctx.logger.debug()デバッグ情報。開発環境で使用します。
tracectx.logger.trace()詳細なトレース情報。通常、詳細な診断に使用します。

ログ形式

各ログ出力は構造化されたJSON形式で、デフォルトで以下のフィールドが含まれます。

フィールド説明
levelnumberログレベル
timenumberタイムスタンプ(ミリ秒)
pidnumberプロセスID
hostnamestringホスト名
msgstringログメッセージ
その他objectカスタムコンテキスト情報

出力例:

{
  "level": 30,
  "time": 1730540153064,
  "pid": 12765,
  "hostname": "nocobase.local",
  "msg": "HelloModel rendered",
  "a": "a"
}

コンテキストバインディング

ctx.logger は、現在のプラグイン、モジュール、またはリクエスト元などのコンテキスト情報を自動的に注入し、ログがその発生源をより正確に追跡できるようにします。

plugin.context.logger.info('Plugin initialized');
model.context.logger.error('Model validation failed', { model: 'User' });

出力例(コンテキスト付き):

{
  "level": 30,
  "msg": "Plugin initialized",
  "plugin": "plugin-audit-trail"
}

カスタムロガー

プラグイン内でカスタムロガーインスタンスを作成し、デフォルト設定を継承または拡張できます。

const logger = ctx.logger.child({ module: 'MyPlugin' });
logger.info('Submodule started');

子ロガーは、親ロガーの設定を継承し、コンテキストを自動的に付加します。

ログレベルの階層

Pinoのログレベルは、数値が大きいほど重要度が高く、小さいほど優先度が低いという定義に従っています。
以下に、ログレベルの完全な階層表を示します。

レベル名数値メソッド名説明
fatal60logger.fatal()致命的なエラー。通常、プログラムが実行を継続できなくなります。
error50logger.error()一般的なエラー。リクエストの失敗や操作の異常を示します。
warn40logger.warn()警告情報。潜在的なリスクや予期せぬ状況を知らせます。
info30logger.info()一般的な情報。システムの状態や通常の操作を記録します。
debug20logger.debug()デバッグ情報。開発段階での問題分析に使用します。
trace10logger.trace()詳細なトレース情報。詳細な診断に使用します。
silent-Infinity(対応するメソッドなし)すべてのログ出力をオフにします。

Pinoは、現在の level 設定以上のログのみを出力します。例えば、ログレベルが info の場合、debug および trace のログは無視されます。

プラグイン開発におけるベストプラクティス

  1. コンテキストロガーを使用する
    プラグイン、モデル、またはアプリケーションのコンテキストで ctx.logger を使用すると、発生源情報を自動的に含めることができます。

  2. ログレベルを使い分ける

    • error を使用してビジネス例外を記録します。
    • info を使用して状態の変化を記録します。
    • debug を使用して開発デバッグ情報を記録します。
  3. ログの過剰な出力を避ける
    特に debug および trace レベルでは、開発環境でのみ有効にすることをお勧めします。

  4. 構造化データを使用する
    文字列を連結するのではなく、オブジェクトパラメータを渡すことで、ログの分析とフィルタリングに役立ちます。

これらのプラクティスに従うことで、開発者はプラグインの実行をより効率的に追跡し、問題をトラブルシューティングし、ロギングシステムの構造化と拡張性を維持できます。