Configurar e usar o registro em log no AWS SDK para Rust - AWS SDK para Rust

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar e usar o registro em log no AWS SDK para Rust

O AWS SDK para Rust usa a estrutura de rastreamento para registro em log. Para habilitar o registro em log, adicione a caixa tracing-subscriber e inicialize-a na aplicação do Rust. Os logs incluem registros de data e hora, níveis de log e caminhos de módulos, ajudando a depurar solicitações de API e comportamento do SDK. Use a variável de ambiente RUST_LOG para controlar o detalhamento do log, filtrando por módulo, se necessário.

Como habilitar o registro em log no AWS SDK para Rust

  1. Em um prompt de comando para o diretório do projeto, adicione a caixa tracing-subscriber como uma dependência:

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

    Isso adiciona a caixa à seção [dependencies] do seu arquivo Cargo.toml.

  2. Inicialize o assinante. Normalmente, isso é feito no início da função main, antes de chamar qualquer operação de SDK para Rust:

    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. Habilite o registro em log usando a variável de ambiente RUST_LOG. Para habilitar a exibição de informações do registro em log, em um prompt de comando, defina a variável de ambiente RUST_LOG para o nível em que você deseja registrar. O seguinte exemplo define o nível de registro em log como debug:

    Linux/macOS
    $ RUST_LOG=debug
    Windows

    Se você estiver usando o VSCode, a janela do terminal geralmente usa PowerShell como padrão. Verifique o tipo de prompt que você está usando.

    C:\> set RUST_LOG=debug
    PowerShell
    PS C:\> $ENV:RUST_LOG="debug"
  4. Execute o programa:

    $ cargo run

    Uma saída adicional na janela do console ou do terminal deve ser exibida.

Para obter mais informações, consulte filtragem de eventos com variáveis de ambiente na documentação do tracing-subscriber.

Interpretar a saída do log

Após habilitar o registro em log seguindo as etapas da seção anterior, as informações adicionais de log serão impressas de forma padronizada por padrão.

Se você estiver usando o formato de saída de log padrão (chamado de “completo” pelo módulo de rastreamento), as informações que você vê na saída do log serão semelhantes a estas:

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

Cada entrada inclui o seguinte:

  • O carimbo de data/hora da entrada do log.

  • O nível de log da entrada. É uma palavra como INFO, DEBUG ou TRACE.

  • O conjunto aninhado de extensões a partir das quais a entrada do log foi gerada, separados por dois pontos (“:”). Isso ajuda você a identificar a origem da entrada de log.

  • O caminho do módulo do Rust que contém o código que gerou a entrada de log.

  • O texto da mensagem de log.

Os formatos de saída padrão do módulo de rastreamento usam códigos de escape ANSI para colorir a saída. Lembre-se dessas sequências de escape ao filtrar ou pesquisar a saída.

nota

O sdk_invocation_id que aparece no conjunto aninhado de extensões é um ID exclusivo gerado no lado do cliente pelo SDK para ajudar a correlacionar as mensagens de log. Ele não está relacionado ao ID da solicitação encontrado na resposta de um AWS service (Serviço da AWS).

Ajustar os níveis de registro em log

Se você usar uma caixa que ofereça suporte a uma filtragem de ambiente, como tracing_subscriber, é possível controlar o detalhamento dos logs por módulo.

Você pode habilitar o mesmo nível de registro em log para cada módulo. O seguinte define o nível de registro em log para trace em cada módulo:

$ RUST_LOG=trace cargo run

Você pode habilitar o registro em log em nível de rastreamento em um módulo específico. No exemplo a seguir, somente os logs provenientes de aws_smithy_runtime entrarão no nível trace.

$ RUST_LOG=aws_smithy_runtime=trace

É possível especificar um nível de log diferente para vários módulos separando-os por vírgulas. O exemplo a seguir define o módulo aws_smithy_runtime para o nível debug de registro em log, e o módulo aws_config para o nível trace de registro em log.

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

A seguinte tabela descreve alguns dos módulos que você pode usar para filtrar mensagens de log:

Prefixo Descrição

aws_smithy_runtime

Registro em log de conexões de solicitações e respostas

aws_config

Carregamento de credenciais

aws_sigv4

Solicitar assinatura e solicitações canônicas

Uma maneira de descobrir quais módulos você precisa incluir na saída do log é primeiro registrar tudo e, em seguida, encontrar o nome da caixa na saída do log para obter as informações necessárias. Em seguida, você pode definir a variável de ambiente de acordo e executar o programa novamente.