翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SDK for Rust でのログ記録の設定と使用
AWS SDK for Rust は、ログ記録にトレースtracing-subscriber クレートを追加して初期化します。ログにはタイムスタンプ、ログレベル、モジュールパスが含まれており、API リクエストと SDK の動作のデバッグに役立ちます。RUST_LOG 環境変数を使用してログの詳細度を制御し、必要に応じてモジュールごとにフィルタリングします。
AWS SDK for Rust でログ記録を有効にする方法
-
プロジェクトディレクトリのコマンドプロンプトで、tracing-subscriber
クレートを次の依存関係として追加します。 $cargo add tracing-subscriber --features tracing-subscriber/env-filterこれにより、
[dependencies]ファイルのCargo.tomlセクションにクレートが追加されます。 -
サブスクライバーを初期化します。通常、これは SDK for Rust オペレーションを呼び出す前に、
main関数の早い段階で行われます。use aws_config::BehaviorVersion; type BoxError = Box<dyn Error + Send + Sync>; #[tokio::main] async fn main() -> Result<(), BoxError> { tracing_subscriber::fmt::init(); // Initialize the subscriber. let config = aws_config::defaults(BehaviorVersion::latest()) .load() .await; let s3 = aws_sdk_s3::Client::new(&config); let _resp = s3.list_buckets() .send() .await?; Ok(()) } -
RUST_LOG環境変数を使用して、ログ記録を有効化します。ログ情報の表示を有効化するには、コマンドプロンプトで、RUST_LOG環境変数をログ記録しようとするレベルに設定します。次の例では、ログ記録のレベルをdebugに設定します。 -
以下のプログラムを実行します。
$cargo runコンソールまたはターミナルウィンドウに追加の出力が表示されます。
詳細については、tracing-subscriber ドキュメントの「環境変数を使用したイベントのフィルタリング
ログ出力の解釈
前のセクションの手順に従ってログ記録を有効化すると、デフォルトで追加のログ情報が標準出力に表示されます。
デフォルトのログ出力形式 (トレースモジュールでは「full」と呼ばれます) を使用している場合、ログ出力に表示される情報は次のようになります。
2024-06-25T16:10:12.367482Z DEBUG invoke{service=s3 operation=ListBuckets sdk_invocation_id=3434933}:try_op:try_attempt:lazy_load_identity: aws_smithy_runtime::client::identity::cache::lazy: identity cache miss occurred; added new identity (took 480.892ms) new_expiration=2024-06-25T23:07:59Z valid_for=25066.632521s partition=IdentityCachePartition(7) 2024-06-25T16:10:12.367602Z DEBUG invoke{service=s3 operation=ListBuckets sdk_invocation_id=3434933}:try_op:try_attempt: aws_smithy_runtime::client::identity::cache::lazy: loaded identity 2024-06-25T16:10:12.367643Z TRACE invoke{service=s3 operation=ListBuckets sdk_invocation_id=3434933}:try_op:try_attempt: aws_smithy_runtime::client::orchestrator::auth: resolved identity identity=Identity { data: Credentials {... }, expiration: Some(SystemTime { tv_sec: 1719356879, tv_nsec: 0 }) } 2024-06-25T16:10:12.367695Z TRACE invoke{service=s3 operation=ListBuckets sdk_invocation_id=3434933}:try_op:try_attempt: aws_smithy_runtime::client::orchestrator::auth: signing request
各エントリには、以下の内容が含まれています。
-
ログエントリのタイムスタンプ。
-
エントリのログレベル。これは、
INFO、DEBUG、またはTRACEのような単語です。 -
ログエントリが生成されたスパン
がネストされた集合で、コロン (":") で区切られています。これにより、ログエントリのソースを識別できます。 -
ログエントリを生成したコードを含む Rust モジュールパス。
-
ログメッセージテキスト。
トレースモジュールの標準出力形式は、ANSI エスケープコードを使用して出力を色分けします。出力のフィルタリングや検索を行う場合は、これらのエスケープシーケンスに注意してください。
注記
ネストされたスパンの集合内に表示される sdk_invocation_id は、SDK によってクライアント側で生成される一意の ID で、ログメッセージを関連付けしやすくします。これは、AWS のサービス からのレスポンスで確認されたリクエスト ID とは無関係です。
ログ記録レベルのファインチューニング
tracing_subscriber などの環境フィルタリングをサポートするクレートを使用する場合は、モジュールごとにログの詳細度を制御できます。
すべてのモジュールに対して同じログレベルを有効化できます。以下は、各モジュールのログ記録レベルを trace に設定しています。
$RUST_LOG=tracecargo run
特定のモジュールのトレースレベルのログ記録を有効化できます。次の例では、aws_smithy_runtime からのログのみが trace レベルで入力されています。
$RUST_LOG=aws_smithy_runtime=trace
複数のモジュールに異なるログレベルを指定するには、カンマで区切ります。次の例では、aws_config モジュールを trace レベルのログ記録に設定し、aws_smithy_runtime モジュールを debug レベルのログ記録に設定しています。
$RUST_LOG=aws_config=trace,aws_smithy_runtime=debugcargo run
次の表は、ログメッセージのフィルタリングに使用できるモジュールの一部を示しています。
| プレフィックス | 説明 |
|---|---|
|
|
リクエストとレスポンスのワイヤログ記録 |
|
|
認証情報の読み込み |
|
|
リクエスト署名と正規リクエスト |
ログ出力に含める必要があるモジュールを特定する 1 つの方法は、最初にすべてをログに記録し、次に必要な情報をログ出力で該当するクレート名を見つけることです。その後、対応する環境変数を設定することにより、プログラムを再度実行できます。