

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
<a name="logging"></a>

O AWS SDK para Rust usa a estrutura de [rastreamento](http://tracing.rs/) 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
<a name="enableLogging"></a>

1. Em um prompt de comando para o diretório do projeto, adicione a caixa [tracing-subscriber](https://crates.io/crates/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`.

1. 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(())               
   }
   ```

1. 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"
   ```

------

1. 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](https://docs.rs/tracing-subscriber/0.3.18/tracing_subscriber/fmt/index.html#filtering-events-with-environment-variables) na documentação do `tracing-subscriber`.

## Interpretar a saída do log
<a name="logging-understanding"></a>

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](https://docs.rs/tracing/latest/tracing/span/index.html) 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
<a name="logging-control"></a>

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.