

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS SDK for Rust에서 로깅 구성 및 사용
<a name="logging"></a>

AWS SDK for Rust는 로깅에 [추적](http://tracing.rs/) 프레임워크를 사용합니다. 로깅을 활성화하려면 `tracing-subscriber` 크레이트를 추가하고 Rust 애플리케이션에서 초기화합니다. 로그에는 타임스탬프, 로그 수준 및 모듈 경로가 포함되어 있어 API 요청 및 SDK 동작을 디버깅하는 데 도움이 됩니다. `RUST_LOG` 환경 변수를 사용하여 필요한 경우 모듈별로 필터링하여 로그 세부 정보를 제어합니다.

## AWS SDK for Rust에서 로깅을 활성화하는 방법
<a name="enableLogging"></a>

1. 프로젝트 디렉터리에 대한 명령 프롬프트에서 [tracing-subscriber](https://crates.io/crates/tracing-subscriber) 크레이트를 종속성으로 추가합니다.

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

   이렇게 하면 `[dependencies]` 파일의 `Cargo.toml` 섹션에 크레이트가 추가됩니다.

1. 구독자를 초기화합니다. 일반적으로 SDK for Rust 작업을 직접 호출하기 전에 `main` 함수 초기에 수행됩니다.

   ```
   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. `RUST_LOG` 환경 변수를 사용하여 로깅을 켭니다. 로깅 정보 표시를 활성화하려면 명령 프롬프트에서 `RUST_LOG` 환경 변수를 로그하려는 수준으로 설정합니다. 다음 예제에서는 로깅을 `debug` 수준으로 설정합니다.

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

   ```
   $ RUST_LOG=debug
   ```

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

   VSCode를 사용하는 경우 터미널 창은 주로 PowerShell로 기본 설정됩니다. 사용 중인 프롬프트 유형을 확인합니다.

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

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

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

------

1. 프로그램을 실행합니다.

   ```
   $ cargo run
   ```

   콘솔 또는 터미널 창에 추가 출력이 표시됩니다.

자세한 내용은 `tracing-subscriber` 설명서의 [환경 변수를 사용하여 이벤트 필터링](https://docs.rs/tracing-subscriber/0.3.18/tracing_subscriber/fmt/index.html#filtering-events-with-environment-variables)을 참조하세요.

## 로그 출력 해석
<a name="logging-understanding"></a>

이전 섹션의 단계에 따라 로깅을 켜면 기본적으로 추가 로그 정보가 표준으로 인쇄됩니다.

기본 로그 출력 형식(추적 모듈에서 ‘full’이라고 함)을 사용하는 경우 로그 출력에 표시되는 정보는 다음과 같습니다.

```
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
```

각 항목에는 다음이 포함되어 있습니다.
+ 로그 항목의 타임스탬프.
+ 항목의 로그 수준. `INFO`, `DEBUG` 또는 `TRACE`와 같은 단어입니다.
+ 로그 항목이 생성된 중첩된 [스팬](https://docs.rs/tracing/latest/tracing/span/index.html) 세트로, 콜론(‘:’)으로 구분됩니다. 이렇게 하면 로그 항목의 소스를 식별할 수 있습니다.
+ 로그 항목을 생성한 코드가 포함된 Rust 모듈 경로입니다.
+ 로그 메시지 텍스트입니다.

추적 모듈의 표준 출력 형식은 ANSI 이스케이프 코드를 사용하여 출력을 색상화합니다. 출력을 필터링하거나 검색할 때 이러한 이스케이프 시퀀스를 염두에 두십시오.

**참고**  
중첩된 스팬 세트 내에 나타나는 `sdk_invocation_id`는 로그 메시지의 상관관계를 파악하는 데 도움이 되도록 SDK에서 생성한 고유한 ID 클라이언트 측입니다. 이는 AWS 서비스의 응답에 있는 요청 ID와 관련이 없습니다.

## 로깅 수준 미세 조정
<a name="logging-control"></a>

`tracing_subscriber`와 같은 환경 필터링을 지원하는 크레이트를 사용하는 경우 모듈별로 로그의 세부 정보를 제어할 수 있습니다.

모든 모듈에 대해 동일한 로깅 수준을 켤 수 있습니다. 다음은 모든 모듈에 대해 로깅 수준을 `trace`로 설정합니다.

```
$ RUST_LOG=trace cargo run
```

특정 모듈에 대해 추적 수준 로깅을 활성화할 수 있습니다. 다음 예제에서는 `aws_smithy_runtime`에서 오는 로그만 `trace` 레벨로 들어옵니다.

```
$ RUST_LOG=aws_smithy_runtime=trace
```

여러 모듈에 대해 쉼표로 구분하여 다른 로그 수준을 지정할 수 있습니다. 다음 예제에서는 `aws_config` 모듈을 `trace` 레벨 로깅으로 설정하고 `aws_smithy_runtime` 모듈을 `debug` 레벨 로깅으로 설정합니다.

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

다음 표에서는 로그 메시지를 필터링하는 데 사용할 수 있는 몇 가지 모듈에 대해 설명합니다.


| Prefix | 설명 | 
| --- | --- | 
|  `aws_smithy_runtime`  |  요청 및 응답 유선 로깅  | 
|  `aws_config`  |  자격 증명 로딩  | 
|  `aws_sigv4`  |  요청 서명 및 표준 요청  | 

로그 출력에 포함해야 하는 모듈을 파악하는 한 가지 방법은 먼저 모든 것을 로그한 다음 필요한 정보를 위해 로그 출력에서 크레이트 이름을 찾는 것입니다. 그런 다음 그에 따라 환경 변수를 설정하고 프로그램을 다시 실행할 수 있습니다.