ロギングを有効にする

このドキュメントでは、Rust でロギングを有効にする方法について説明します。リクエストとレスポンスをコンソールにロギングすると、アプリケーションのトラブルシューティングが容易になります。

前提条件

このガイドでは Secret Manager API を使用します。この API は、開始する前に有効にする必要があります。サービスを有効にする方法については、サービスのクイックスタートをご覧ください。

Rust ライブラリの完全な設定手順については、Rust を使ってみるをご覧ください。

依存関係

Cargo.toml ファイルで依存関係を宣言する必要があります。

cargo add google-cloud-secretmanager-v1 google-cloud-gax

ロギングを有効にする

Rust クライアント ライブラリは、Tokio の tracing クレートを使用して、スコープ付きの構造化された非同期対応の診断情報を収集します。トレース クレートは、Subscriber トレイトを使用して、診断のソース(Rust クライアント ライブラリなど)をこれらの診断を収集するコンポーネントから分離します。Subscriber には多くの実装が用意されています。この例では、tracing-subscriber クレートに含まれる fmt サブスクライバーを使用します。

  1. tracing-subscriber クレートへの依存関係を追加します。

    cargo add tracing tracing-subscriber
    
  2. プロジェクト ID を関数パラメータとして受け取る関数を作成します。

    /// # Parameters
    /// - `project_id`: the id of a Google Cloud project, or its numeric ID.
    ///   For example: `my-project`.
    pub async fn sample(project_id: &str) -> anyhow::Result<()> {

  3. 例を読みやすくするために、いくつかの use 宣言を導入します。

    use google_cloud_gax::paginator::ItemPaginator;
    use google_cloud_secretmanager_v1::client::SecretManagerService;
    use tracing_subscriber;

  4. デフォルトのトレース サブスクライバーを初期化します。

    tracing_subscriber::fmt::init();

  5. トレースを有効にしてクライアントを初期化します。.with_tracing() の呼び出しに注意してください。

    let client = SecretManagerService::builder()
        .with_tracing()
        .build()
        .await?;

  6. 次に、クライアントを使用してリクエストを送信します。

    let mut items = client
        .list_secrets()
        .set_parent(format!("projects/{project_id}"))
        .by_item();
    println!("listing all secrets in project {project_id}");
    while let Some(secret) = items.next().await.transpose()? {
        println!("  {secret:?}");
    }
    println!("DONE");

予想される出力

出力(読みやすくするために一部編集)には、次のような行が含まれます。

2025-11-03T14:17:31.759452Z  INFO list_secrets{self=SecretManagerService ...

この行にはリクエストが含まれています。

req=ListSecretsRequest { parent: "projects/... }

回答:

return=Ok(Response { parts: ..., body: ListSecretsResponse { ...

詳細

tracing_subscriber::fmt::init() を使用して作成されたデフォルトのサブスクライバーは、RUST_LOG 環境変数を使用して動的に構成できます。詳しくは、そのドキュメントをご覧ください。