Rust 有一个看起来很受欢迎的跟踪库。它使用一个名为“span”的构建块:
跨度表示程序执行的时间段。
现在我已经在整个应用程序中设置了跨度,我如何实际记录它们的持续时间?
到目前为止我发现:
有什么办法可以通过追踪来做到这一点吗?
kmd*_*eko 10
基本格式化层来自跟踪订阅者对于记录的内容非常灵活。默认情况下,它只会显示日志事件,但还有其他可用于跨度的事件(新建、进入、退出、关闭)。您可能对记录“关闭”事件感兴趣,这些事件指示跨度何时结束,并且知道从开始时起经过的时间。
\n您可以简单地使用.with_span_events()和来完成此操作FmtSpan::CLOSE即可完成此操作。这是一个示例:
[dependencies]\ntracing = "0.1.36"\ntracing-subscriber = "0.3.15"\nRun Code Online (Sandbox Code Playgroud)\nuse std::time::Duration;\nuse tracing_subscriber::fmt;\nuse tracing_subscriber::fmt::format::FmtSpan;\n\n#[tracing::instrument]\nfn do_some_work(n: i32) {\n std::thread::sleep(Duration::from_millis(100));\n if n == 1 {\n do_some_more_work();\n }\n}\n\n#[tracing::instrument]\nfn do_some_more_work() {\n std::thread::sleep(Duration::from_millis(100));\n}\n\nfn main() {\n fmt::fmt()\n .with_span_events(FmtSpan::CLOSE)\n .with_target(false)\n .with_level(false)\n .init();\n\n for n in 0..3 {\n do_some_work(n);\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\nuse std::time::Duration;\nuse tracing_subscriber::fmt;\nuse tracing_subscriber::fmt::format::FmtSpan;\n\n#[tracing::instrument]\nfn do_some_work(n: i32) {\n std::thread::sleep(Duration::from_millis(100));\n if n == 1 {\n do_some_more_work();\n }\n}\n\n#[tracing::instrument]\nfn do_some_more_work() {\n std::thread::sleep(Duration::from_millis(100));\n}\n\nfn main() {\n fmt::fmt()\n .with_span_events(FmtSpan::CLOSE)\n .with_target(false)\n .with_level(false)\n .init();\n\n for n in 0..3 {\n do_some_work(n);\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\n您可以使用其他方法或创建自定义来根据您的喜好进一步定制它FormatEvent实现来根据您的喜好进一步自定义它。
我确实想提一下,跟踪是“一个用于检测 Rust 程序以收集结构化、基于事件的诊断信息的框架”。虽然功能计时是该诊断信息的一部分,但它的设计方式是在现场收集该信息。如果您尝试在合成环境中评估代码的性能,我鼓励您使用更强大的基准测试库,例如criteria。
\n| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |