Protokollierung von AWS SDK for Rust Code aktivieren - AWS SDK for Rust

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Protokollierung von AWS SDK for Rust Code aktivieren

Das AWS SDK for Rust verwendet das Tracing-Framework für die Protokollierung.

  1. Fügen Sie in einer Befehlszeile für Ihr Projektverzeichnis die Tracing-Subscriber-Crate als Abhängigkeit hinzu:

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

    Dadurch wird die Kiste dem [dependencies] Abschnitt Ihrer Datei hinzugefügt. Cargo.toml

  2. Initialisieren Sie den Abonnenten. Normalerweise erfolgt dies zu Beginn der main Funktion, bevor ein SDK für Rust-Operationen aufgerufen wird:

    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. Schalten Sie die Protokollierung mithilfe der RUST_LOG Umgebungsvariablen ein. Um die Anzeige von Protokollinformationen zu aktivieren, setzen Sie in einer Befehlszeile die RUST_LOG Umgebungsvariable auf die Ebene, auf der Sie protokollieren möchten. Im folgenden Beispiel wird die Protokollierung auf die debug Stufe eingestellt:

    Linux/macOS
    $ RUST_LOG=debug
    Windows

    Wenn Sie verwenden VSCode, ist das Terminalfenster häufig standardmäßig auf PowerShell eingestellt. Überprüfen Sie, welche Art von Aufforderung Sie verwenden.

    C:\> set RUST_LOG=debug
    PowerShell
    PS C:\> $ENV:RUST_LOG="debug"
  4. Führen Sie das Programm aus:

    $ cargo run

    Sie sollten zusätzliche Ausgaben in der Konsole oder im Terminalfenster sehen.

Weitere Informationen finden Sie in der tracing-subscriber Dokumentation unter Filtern von Ereignissen mit Umgebungsvariablen.

Interpretieren Sie die Protokollausgabe

Sobald Sie die Protokollierung aktiviert haben, indem Sie die Schritte im vorherigen Abschnitt ausgeführt haben, werden zusätzliche Protokollinformationen standardmäßig ausgedruckt.

Wenn Sie das standardmäßige Protokollausgabeformat (vom Protokollierungsmodul als „vollständig“ bezeichnet) verwenden, sehen die Informationen, die Sie in der Protokollausgabe sehen, in etwa so aus:

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

Jeder Eintrag beinhaltet Folgendes:

  • Der Zeitstempel des Protokolleintrags.

  • Die Protokollebene des Eintrags. Das ist ein Wort wie INFODEBUG, oderTRACE.

  • Die verschachtelte Gruppe von Bereichen, aus denen der Protokolleintrag generiert wurde, getrennt durch Doppelpunkte („:“). Auf diese Weise können Sie die Quelle des Protokolleintrags identifizieren.

  • Der Rust-Modulpfad, der den Code enthält, der den Protokolleintrag generiert hat.

  • Der Text der Protokollnachricht.

Die Standardausgabeformate des Tracing-Moduls verwenden ANSI-Escape-Codes, um die Ausgabe einzufärben. Beachten Sie diese Escape-Sequenzen, wenn Sie die Ausgabe filtern oder durchsuchen.

Anmerkung

Was innerhalb der sdk_invocation_id verschachtelten Spans angezeigt wird, ist eine eindeutige ID, die vom SDK vom Client generiert wird, um die Korrelation von Protokollnachrichten zu erleichtern. Sie hat nichts mit der Anfrage-ID zu tun, die in der Antwort von einem gefunden wurde. AWS-Service

Optimieren Sie Ihre Protokollierungsstufen

Wenn Sie eine Kiste verwenden, die eine Umgebungsfilterung unterstützt, können Sie z. tracing_subscriber B. die Ausführlichkeit der Protokolle nach Modulen steuern.

Sie können für jedes Modul dieselbe Protokollierungsebene aktivieren. Im Folgenden wird die Protokollierungsebene trace für jedes Modul auf festgelegt:

$ RUST_LOG=trace cargo run

Sie können die Protokollierung auf Trace-Ebene für ein bestimmtes Modul aktivieren. Im folgenden Beispiel werden auf Ebene nur Logs von aws_smithy_runtime eintreffentrace.

$ RUST_LOG=aws_smithy_runtime=trace

Sie können für mehrere Module eine andere Protokollebene angeben, indem Sie sie durch Kommas trennen. Im folgenden Beispiel wird das aws_config Modul auf trace Level-Logging und das aws_smithy_runtime Modul auf debug Level-Logging gesetzt.

$ RUST_LOG=aws_config=trace,aws_smithy_runtime=debug cargo run

In der folgenden Tabelle werden einige der Module beschrieben, die Sie zum Filtern von Protokollnachrichten verwenden können:

Präfix Beschreibung

aws_smithy_runtime

Kabelprotokollierung von Anfragen und Antworten

aws_config

Anmeldeinformationen werden geladen

aws_sigv4

Signierung von Anfragen und kanonische Anfragen

Eine Möglichkeit, herauszufinden, welche Module Sie in Ihre Protokollausgabe aufnehmen müssen, besteht darin, zuerst alles zu protokollieren und dann den Crate-Namen für die benötigten Informationen in der Protokollausgabe zu suchen. Dann können Sie die Umgebungsvariable entsprechend setzen und Ihr Programm erneut ausführen.