本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS SDK for Rust 使用跟踪
-
在项目目录的命令提示符下,将跟踪订阅者
箱子添加为依赖项: $
cargo add tracing-subscriber --features tracing-subscriber/env-filter这会将箱子添加到
Cargo.toml
文件的[dependencies]
部分。 -
初始化订阅者。通常,这是在调用任何 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(()) }
-
使用
RUST_LOG
环境变量开启日志记录。要启用日志信息的显示,请在命令提示符下将RUST_LOG
环境变量设置为要登录的级别。以下示例将日志设置为debug
级别:$
RUST_LOG=debug
-
运行该程序:
$
cargo run您应该在控制台或终端窗口中看到其他输出。
有关更多信息,请参阅tracing-subscriber
文档中使用环境变量筛选事件
解释日志输出
按照上一节中的步骤开启日志记录后,默认情况下,其他日志信息将打印为标准输出。
如果您使用的是默认的日志输出格式(跟踪模块称为 “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
。 -
生成日志条目的嵌套跨
度集,用冒号 (“:”) 分隔。这可以帮助您识别日志条目的来源。 -
包含生成日志条目的代码的 Rust 模块路径。
-
日志消息文本。
跟踪模块的标准输出格式使用 ANSI 转义码对输出进行着色。过滤或搜索输出时,请记住这些转义序列。
注意
嵌套跨度集中显示sdk_invocation_id
的是由 SDK 在客户端生成的唯一 ID,用于帮助关联日志消息。它与在的响应中找到的请求编号无关 AWS 服务。
微调您的日志级别
如果您使用支持环境筛选的 crate(例如)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 | 描述 |
---|---|
|
请求和响应电汇记录 |
|
正在加载凭证 |
|
请求签名和规范请求 |
要弄清楚需要在日志输出中包含哪些模块,一种方法是先记录所有内容,然后在日志输出中找到 crate 名称以获取所需的信息。然后,您可以相应地设置环境变量并再次运行您的程序。