发布于 2022-09-14 15:55:25
来自追踪-订户的基本格式化层非常灵活,可以记录什么。默认情况下,它只显示日志事件,但还有其他可用于跨范围的事件(新建、输入、退出、关闭)。您会对日志记录“关闭”事件感兴趣,这些事件指示span何时结束,并知道从何时开始使用。
您只需使用.with_span_events()
和FmtSpan::CLOSE
就可以做到这一点。这是一个样本:
[dependencies]
tracing = "0.1.36"
tracing-subscriber = "0.3.15"
use std::time::Duration;
use tracing_subscriber::fmt;
use tracing_subscriber::fmt::format::FmtSpan;
#[tracing::instrument]
fn do_some_work(n: i32) {
std::thread::sleep(Duration::from_millis(100));
if n == 1 {
do_some_more_work();
}
}
#[tracing::instrument]
fn do_some_more_work() {
std::thread::sleep(Duration::from_millis(100));
}
fn main() {
fmt::fmt()
.with_span_events(FmtSpan::CLOSE)
.with_target(false)
.with_level(false)
.init();
for n in 0..3 {
do_some_work(n);
}
}
2022-09-14T15:47:01.684149Z do_some_work{n=0}: close time.busy=110ms time.idle=5.10µs
2022-09-14T15:47:01.904656Z do_some_work{n=1}:do_some_more_work: close time.busy=109ms time.idle=3.00µs
2022-09-14T15:47:01.904986Z do_some_work{n=1}: close time.busy=220ms time.idle=1.60µs
2022-09-14T15:47:02.014846Z do_some_work{n=2}: close time.busy=110ms time.idle=2.20µs
您可以使用其他方法或通过创建自定义FormatEvent
实现来进一步定制它。
我想提到的是,追迹是“一个用于检测锈蚀程序以收集结构化的、基于事件的诊断信息的框架”。虽然功能定时是诊断信息的一部分,但它的设计方式是在实地收集这些信息。如果您试图在合成环境中评估代码的性能,我鼓励您使用一个更健壮的基准库,比如标准。
https://stackoverflow.com/questions/73718229
复制相似问题