AWS SDK for Rust でのログ記録の設定と使用 - AWS SDK for Rust

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SDK for Rust でのログ記録の設定と使用

AWS SDK for Rust は、ログ記録にトレースフレームワークを使用しています。ログ記録を有効にするには、Rust アプリケーションで tracing-subscriber クレートを追加して初期化します。ログにはタイムスタンプ、ログレベル、モジュールパスが含まれており、API リクエストと SDK の動作のデバッグに役立ちます。RUST_LOG 環境変数を使用してログの詳細度を制御し、必要に応じてモジュールごとにフィルタリングします。

AWS SDK for Rust でログ記録を有効にする方法

  1. プロジェクトディレクトリのコマンドプロンプトで、tracing-subscriber クレートを次の依存関係として追加します。

    $ cargo add tracing-subscriber --features tracing-subscriber/env-filter

    これにより、[dependencies] ファイルの Cargo.toml セクションにクレートが追加されます。

  2. サブスクライバーを初期化します。通常、これは 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(()) }
  3. RUST_LOG 環境変数を使用して、ログ記録を有効化します。ログ情報の表示を有効化するには、コマンドプロンプトで、RUST_LOG 環境変数をログ記録しようとするレベルに設定します。次の例では、ログ記録のレベルを debug に設定します。

    Linux/macOS
    $ RUST_LOG=debug
    Windows

    VSCode を使用している場合、ターミナルウィンドウのデフォルトは PowerShell です。使用しているプロンプトのタイプを確認します。

    C:\> set RUST_LOG=debug
    PowerShell
    PS C:\> $ENV:RUST_LOG="debug"
  4. 以下のプログラムを実行します。

    $ 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

各エントリには、以下の内容が含まれています。

  • ログエントリのタイムスタンプ。

  • エントリのログレベル。これは、INFODEBUG、または TRACE のような単語です。

  • ログエントリが生成されたスパンがネストされた集合で、コロン (":") で区切られています。これにより、ログエントリのソースを識別できます。

  • ログエントリを生成したコードを含む Rust モジュールパス。

  • ログメッセージテキスト。

トレースモジュールの標準出力形式は、ANSI エスケープコードを使用して出力を色分けします。出力のフィルタリングや検索を行う場合は、これらのエスケープシーケンスに注意してください。

注記

ネストされたスパンの集合内に表示される sdk_invocation_id は、SDK によってクライアント側で生成される一意の ID で、ログメッセージを関連付けしやすくします。これは、AWS のサービス からのレスポンスで確認されたリクエスト ID とは無関係です。

ログ記録レベルのファインチューニング

tracing_subscriber などの環境フィルタリングをサポートするクレートを使用する場合は、モジュールごとにログの詳細度を制御できます。

すべてのモジュールに対して同じログレベルを有効化できます。以下は、各モジュールのログ記録レベルを trace に設定しています。

$ RUST_LOG=trace cargo 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=debug cargo run

次の表は、ログメッセージのフィルタリングに使用できるモジュールの一部を示しています。

プレフィックス 説明

aws_smithy_runtime

リクエストとレスポンスのワイヤログ記録

aws_config

認証情報の読み込み

aws_sigv4

リクエスト署名と正規リクエスト

ログ出力に含める必要があるモジュールを特定する 1 つの方法は、最初にすべてをログに記録し、次に必要な情報をログ出力で該当するクレート名を見つけることです。その後、対応する環境変数を設定することにより、プログラムを再度実行できます。