

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración y uso del registro en AWS SDK de Rust
<a name="logging"></a>

AWS SDK para Rust utiliza el marco de [rastreo](http://tracing.rs/) para el registro. Para habilitar el registro, agregue la caja `tracing-subscriber` e inicialícela en su aplicación Rust. Los registros incluyen marcas de tiempo, niveles de registro y rutas de módulos, lo que contribuye a depurar las solicitudes de la API y el comportamiento del SDK. Use la variable de entorno `RUST_LOG` para controlar el detalle de los registros y filtre por módulo si es necesario. 

## Cómo habilitar el registro en AWS SDK para Rust
<a name="enableLogging"></a>

1. En la línea de comandos del directorio del proyecto, agregue la caja [tracing-subscriber](https://crates.io/crates/tracing-subscriber) como dependencia:

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

   De esta forma, se agrega la caja a la sección `[dependencies]` del archivo `Cargo.toml`.

1. Inicialización del suscriptor. Por lo general, esto se hace al principio de la función `main` antes de llamar a cualquier operación 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. Active el registro mediante la variable de entorno `RUST_LOG`. Para habilitar la visualización de la información de registro, en una línea de comandos, defina la variable de entorno `RUST_LOG` en el nivel en el que desea registrar. En el siguiente ejemplo, el nivel de registro se establece en `debug`.

------
#### [ Linux/macOS ]

   ```
   $ RUST_LOG={{debug}}
   ```

------
#### [ Windows ]

   Si utiliza VSCode, la ventana de terminal suele tener el valor predeterminado de PowerShell. Compruebe el tipo de petición que está utilizando.

   ```
   C:\> set RUST_LOG={{debug}}
   ```

------
#### [ PowerShell ]

   ```
   PS C:\> $ENV:RUST_LOG="debug"
   ```

------

1. Ejecute el programa:

   ```
   $ cargo run
   ```

   Debería ver un información adicional en la ventana de la consola o del terminal.

Para obtener más información, consulte el [filtrado de eventos con variables de entorno](https://docs.rs/tracing-subscriber/0.3.18/tracing_subscriber/fmt/index.html#filtering-events-with-environment-variables) en la documentación de `tracing-subscriber`.

## Interpretación del resultado del registro
<a name="logging-understanding"></a>

Una vez que haya activado el registro siguiendo los pasos de la sección anterior, la información adicional del registro se imprimirá en la salida estándar de forma predeterminada. 

Si utiliza el formato de salida del registro predeterminado (denominado «completo» por el módulo de rastreo), la información que aparece en la salida del registro es similar a la siguiente:

```
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 incluye lo siguiente:
+ La marca de tiempo de la entrada del registro.
+ El nivel de registro de la entrada. Se trata de una palabra como `INFO`, `DEBUG` o `TRACE`.
+ El conjunto anidado de [intervalos](https://docs.rs/tracing/latest/tracing/span/index.html) a partir del cual se generó la entrada de registro, separados por dos puntos («:»). Esto le ayuda a identificar el origen de la entrada de registro.
+ La ruta del módulo de Rust que contiene el código que generó la entrada de registro.
+ El texto del mensaje de registro.

Los formatos de salida estándar del módulo de rastreo utilizan códigos de escape ANSI para colorear la salida. Tenga en cuenta estas secuencias de escape al filtrar o buscar la salida.

**nota**  
El `sdk_invocation_id` que aparece dentro del conjunto anidado de intervalos es un ID único generado por el SDK en el lado del cliente para correlacionar los mensajes de registro. No está relacionado con el ID de solicitud que se encuentra en la respuesta de un Servicio de AWS.

## Refinamiento de niveles de registro
<a name="logging-control"></a>

Si utiliza una caja que admite el filtrado de entornos, como `tracing_subscriber`, puede controlar el detalle de los registros por módulo.

Puede activar el mismo nivel de registro para todos los módulos. A continuación, se establece el nivel de registro en `trace` para todos los módulos: 

```
$ RUST_LOG={{trace}} cargo run
```

Puede activar el registro a nivel de rastreo para un módulo específico. En el siguiente ejemplo, solo los registros de `aws_smithy_runtime` entrarán en el nivel `trace`.

```
$ RUST_LOG={{aws_smithy_runtime}}={{trace}}
```

Puede especificar un nivel de registro diferente para varios módulos separándolos con comas. El siguiente ejemplo establece el módulo `aws_config` en el nivel de registro de `trace` y el módulo `aws_smithy_runtime` en el nivel de registro `debug`. 

```
$ RUST_LOG={{aws_config}}={{trace}},{{aws_smithy_runtime}}={{debug}} cargo run
```

En la tabla siguiente se describen algunos de los módulos que puede usar para filtrar los mensajes de registro:


| Prefix | Descripción | 
| --- | --- | 
| `aws_smithy_runtime` | Registro de solicitudes y respuestas | 
| `aws_config` | Carga de credenciales | 
| `aws_sigv4` | Solicitudes de firma y solicitudes canónicas | 

Una forma de averiguar qué módulos debe incluir en la salida del registro es registrarlo todo primero y, a continuación, buscar el nombre de la caja en la salida del registro para obtener la información que necesita. A continuación, puede configurar la variable de entorno según corresponda y volver a ejecutar el programa.