logologo
スタート
マニュアル
開発
プラグイン
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
スタート
マニュアル
開発
プラグイン
API
logologo

クイックスタート

プラグイン開発概要
最初のプラグインを作成
プロジェクトディレクトリ構造

サーバーサイド開発

概要
プラグイン
コレクション
データベース操作
データソース管理
リソース管理
ACL権限制御
ミドルウェア
キャッシュ
イベント
リクエストコンテキスト
マイグレーション
ロガー
I18n 国際化
コマンド
定時タスク管理
テスト

クライアントサイド開発

概要
プラグイン
コンテキスト
ルーター
ACL権限制御
データソース管理
リソース
リクエスト
スタイルとテーマ
ロガー
I18n 国際化
テスト

その他

プラグインアップグレードガイド
言語一覧
依存関係の管理
ビルド
Previous Pageスタイルとテーマ
Next PageI18n 国際化
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. 構造化データを使用する
    文字列を連結するのではなく、オブジェクトパラメータを渡すことで、ログの分析とフィルタリングに役立ちます。

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