ログ記録
Overview
このガイドでは、 Node.jsドライバーでロガーを構成する方法を学習できます。ドライバーを使用すると、次の重大度レベルで分類された情報をログできます。
emergency
alert
critical
error
warn
notice
info
debug
trace
off
上記のリストは、重大度レベルの降順順に並べられています。重大度レベルを指定すると、より重大度の高いすべてのメッセージもログに記録されます。例、ログレベルを critical
に設定すると、重大度レベルが emergency
と alert
のログメッセージも生成されます。
指定する重大度レベルが低いほど、ドライバーがログする情報が多くなり、アプリケーションのパフォーマンスに影響可能性があります。
構成
環境変数を指定することで、コード変更なしでNode.jsドライバーでのログ記録を構成できます。また、MongoClient
コンストラクターでクライアントオプションを指定して、プログラムでログを構成することもできます。
注意
接続文字列は、ロギング サポートが異なる異なるアプリの配置間で共有されることが多いため、ロギングの構成に接続文字列を使用することは推奨されません。
環境変数
次の環境変数の 1 つ以上で重大度レベルを指定することで、ドライバーのさまざまなコンポーネントのログ記録を構成できます。
MONGODB_LOG_ALL
: 設定されていないコンポーネントのデフォルトの重大度を指定しますMONGODB_LOG_COMMAND
:サーバーに送信されたすべてのコマンドをログに記録MONGODB_LOG_TOPOLOGY
: クラスタートポロジーの変更をログに記録MONGODB_LOG_SERVER_SELECTION
:サーバー選択プロセスをログに記録MONGODB_LOG_CONNECTION
: すべての接続プールイベントをログに記録MONGODB_LOG_CLIENT
: すべてのクライアントイベントをログに記録
上記の環境変数を指定しない場合、ドライバーは MONGODB_LOG_ALL
の値を使用します。指定されていない場合は、暗黙的に off
に設定されます。
Tip
コマンドレベルでのログ記録は、 コマンドがサーバーに送信される頻度が高いため、最もパフォーマンスの高いログオプションです。アプリケーションのデバッグに必要な場合にのみ、このオプションを指定してください。
次の例では、MONGODB_LOG_COMMAND
を除くすべてのコンポーネントのログレベルを debug
に設定します。
export MONGODB_LOG_ALL="debug" export MONGODB_LOG_COMMAND="off"
ログ ロケーション
ドライバーが stderr
または stdout
のどちらにログを記録するか指定するには、次の例に示すように、MONGODB_LOG_PATH
環境変数を "stderr"
または "stdout"
に設定します。
export MONGODB_LOG_PATH="stderr"
デフォルトでは 、ドライバーは stderr
にログを記録します。
ドキュメントの長さ
ドライバーは EJSON を使用してログに記録されたドキュメントを文字列化します。これにより、string はデフォルトで 1000 文字に制限されます。MONGODB_LOG_MAX_DOCUMENT
環境変数を指定することで、ロガーの最大ドキュメント長を指定できます。切り捨てを実行しない場合は、この変数を 0
に設定します。
次の例では、最大ドキュメント長を 500 文字に設定します。
export MONGODB_LOG_MAX_DOCUMENT_LENGTH=500
クライアント オプション
MongoClient
コンストラクターでクライアントオプションを指定することで、プログラムでログを構成できます。クライアントオプションは環境変数よりも優先されるため、ドライバーが環境変数に応答しないようにしたい場合にのみ、クライアント内で指定します。
Tip
アプリケーションがstdout
または stderr
の形式に依存している場合は、アプリケーションユーザーの環境変数との競合を回避するために、クライアントオプションを使用してロギングを構成することをお勧めします。
ログ記録を構成するコンポーネントを指定するには、次のクライアントオプションを 1 つ以上指定します。
default
: 設定されていないコンポーネントのデフォルトの重大度を指定しますcommand
:サーバーに送信されたすべてのコマンドをログに記録topology
: クラスタートポロジーの変更をログに記録serverSelection
:サーバー選択プロセスをログに記録connection
: すべての接続プールイベントをログに記録client
: すべてのクライアントイベントをログに記録
コンポーネントのログレベルを指定するには、コンポーネントと希望する重大度レベルを含むオブジェクトに mongodbLogComponentSeverities
オプションを設定します。次の例では、command
を除くすべてのコンポーネントのログレベルを debug
に設定します。
const client = new MongoClient("<connection string>", { mongodbLogComponentSeverities: { default: "debug", command: "off" } });
ログ ロケーション
ドライバーが stderr
または stdout
のどちらにログを記録するか指定するには、次の例に示すように、 mongodbLogPath
オプションを "stderr"
または "stdout"
に設定します。
const mongodbLogComponentSeverities = { default: "debug" }; const mongodbLogPath = "stdout"; const client = new MongoClient("<connection string>", { mongodbLogComponentSeverities, mongodbLogPath } );
デフォルトでは 、ドライバーは stderr
にログを記録します。
カスタムログの保存先を指定することもできます。次の例では、カスタムログの保存先を作成します。
import fs from 'node:fs/promises'; import util from 'node:util'; const mongodbLogPath = { file: await fs.open(`./server-${+new Date()}.logs`, 'w'), async write(log) { try { await this.file?.appendFile(util.inspect(log) + '\n'); } catch (fileError) { console.log('cannot log anymore', fileError); this.file = null; } } } const client = new MongoClient("<connection string>", { mongodbLogPath });
関数が 書込み操作でエラーをスローした場合、スローされたエラーによってロガーは終了します。このため、前述の例に示すように、エラーをスローするのではなく、書込み関数を非実行にしてエラーを処理することをお勧めします。
注意
適切なログローテーション システムが設定されていない場合、ログ記録によってディスク領域が枯渇する可能性があります。カスタム書込み関数は一般的なログ記録ライブラリに接続することをお勧めします。
ドキュメントの長さ
ドライバーは EJSON を使用してログに記録されたドキュメントを文字列化します。これにより、string はデフォルトで 1000 文字に制限されます。mongodbLogMaxDocumentLength
オプションを指定することで、ロガーの最大ドキュメント長を指定できます。このオプションを 0
に設定すると、切り捨ては実行されません。
次の例では、最大ドキュメント長を 500 文字に設定します。
const mongodbLogComponentSeverities = { default: "debug" }; const mongodbLogLength = 500; const client = new MongoClient("<connection string>", { mongodbLogComponentSeverities, mongodbLogLength });
詳細情報
Node.jsドライバーによるモニタリングの詳細については、次のモニタリング ガイドを参照してください。
API ドキュメント
このガイドで説明したオプションやタイプの詳細については、次のAPIドキュメントを参照してください。