トレースとロギング
Overview
このガイドでは、Rust ドライバーを使用してアプリケーションのトレースとログを設定する方法を学習できます。 トレースとロギングは、アプリケーションを観察するための 2 つのフレームワークです。 ログ記録 では、ドライバーのアクティビティの個別のイベントベースのログを表示できますが、トレースでは継続的なビューが提供されます。
Rust ドライバーでは、トレースとログの機能は大きな違いはありません。 ただし、トレース機能を有効にすると、ドライバーはより構造化された形式でメッセージを出力するため、アプリケーションはイベント メッセージをプログラム的に消費するのが容易になります。
トレースとロガーは、指定可能な重大度または冗長レベルでメッセージをログに記録します。 アプリケーション内でこれらのコンポーネントのいずれかを有効にすると、アプリケーションのアクティビティに関する情報をさまざまな詳細レベルで受け取ることができます。
Tip
ロギング重大度レベルの詳細については、メッセージ ロギング用の Syslog 標準に関する Wikipedia のエントリを参照してください。
トレースとログの有効化
ドライバー は crate ドライバーがドライバー イベントのメッセージを発行できるようにします。
重要
Crate は不安定
tracing
crate には 1.0 のバージョン リリースがないため、機能は不安定であると考えられます。
トレース、ロギング、またはその両方を有効にするには、 tracing
依存関係とtracing-unstable
機能フラグをCargo.toml
ファイルのmongodb
依存関係に追加する必要があります。
[dependencies] tracing = "0.1.37" [dependencies.mongodb] version = "3.1.0" features = ["tracing-unstable"]
次の表では、イベントを発行できるコンポーネントとそれに対応するターゲットについて説明します。
コンポーネント | ターゲット | 説明 |
---|---|---|
コマンド | mongodb::command | イベントは、データベースに送信されたコマンドと、その成功または失敗を記述します。 |
サーバーの選択 | mongodb::server_selection | イベントは、MongoDB 配置でサーバーを選択するドライバーのプロセスを記述します。 |
接続 | mongodb::connection | イベントは、ドライバー接続プールとそれに含まれる接続の動作を記述します。 |
ロギング コンポーネントと重大度レベルを指定するには、アプリケーションをコンパイルして実行するときにRUST_LOG
環境変数を設定できます。 ロギング コンポーネントを指定するには、 RUST_LOG
の値を前の表に記載されているターゲットの 1 つに設定し、重大度レベルを含めます。
次のコードは、 debug
レベルで接続イベントを記録するプログラムを実行するコマンドを示しています。
$ RUST_LOG='mongodb::connection=debug' cargo run
次のセクションでは、トレースまたはログのいずれかを使用してイベントを消費する方法について説明します。
トレース機能の実装
トレースを有効にするには、 Cargo.toml
ファイルにtracing-subscriber
の依存関係も追加する必要があります。 次のコードは、ドライバーの依存関係とtracing-subscriber
crate を含むサンプルの依存関係リストを示しています。
[dependencies] tracing = "0.1.37" tracing-subscriber = "0.3.17" [dependencies.mongodb] version = "3.1.0" features = ["tracing-unstable"]
次に、アプリケーションで、トレース機能でイベントを消費するためにtracing::Subscriber
特権を実装するタイプを登録する必要があります。 次のコードは、 RUST_LOG
環境変数の仕様を使用するトレース サブスクライブを登録する方法を示しています。
tracing_subscriber::fmt::init();
Tip
サブスクライブの登録の詳細については、 のtracing
ドキュメントを参照してください。
アプリケーションを実行し、 debug
レベルでコマンドに対して追跡すると、操作を実行するたびにドライバーはメッセージを発行します。 次のコードは、このトレース仕様の コマンドを示しています。
$ RUST_LOG='mongodb::command=debug' cargo run
debug
レベルのトレース機能が指定されている場合、書込み操作を実行すると、ドライバーはトレース メッセージを生成します。
let my_coll = client.database("db").collection("test_coll"); my_coll.insert_one(doc! { "x" : 1 }).await?;
2023-07-21T17:37:13.587794Z DEBUG mongodb::command: Command started topologyId="..." command="{\"insert\":\"test_coll\", ...}" databaseName="test" commandName="insert" requestId=12 driverConnectionId=1 serverConnectionId=133839 serverHost="..." serverPort=27017 2023-07-21T17:37:13.630401Z DEBUG mongodb::command: Command succeeded topologyId="..." reply="{\"n\":1, ...}" commandName="insert" requestId=12 driverConnectionId=1 serverConnectionId=133839 serverHost="..." serverPort=27017 durationMS=42
ログを実装する
ロギングを有効にするには、 Cargo.toml
ファイルのtracing
依存関係にlog
またはlog-always
の機能フラグも追加する必要があります。 また、 env_logger
などのロギング レートの依存関係も追加する必要があります。
[dependencies] tracing = { version = "0.1.37", features = ["log"] } env_logger = "0.10.0" [dependencies.mongodb] version = "3.1.0" features = ["tracing-unstable"]
Tip
log
とlog-always
フラグの詳細については、 のtracing
ドキュメントを参照してください。
サードパーティのログ記録クレートenv_logger
の詳細については、その ドキュメントを参照してください。
次に、アプリケーション内で、ログ記録のあるイベントを消費するために グローバル ロガー を登録する必要があります。 次のコードは、 RUST_LOG
環境変数の仕様を使用するロガーを登録する方法を示しています。
env_logger::init();
アプリケーションを実行し、 debug
レベルで接続に対してログを記録すると、接続を開く、使用する、閉じるたびにドライバーによってメッセージが表示されます。 次のコードは、このログ仕様の コマンドを示しています。
$ RUST_LOG='mongodb::connection=debug' cargo run
debug
レベル トレースが指定されている場合、接続を開いて接続を使用すると、ドライバーはログ メッセージを生成します。
let my_coll = client.database("db").collection("test_coll"); my_coll.insert_one(doc! { "x" : 1 }).await?;
[2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool ready topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection checkout started topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection created topologyId="..." serverHost="..." serverPort=27017 driverConnectionId=1 ...
詳細情報
クライアント オプションの設定の詳細については、 接続オプション に関するガイドを参照してください。