首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用锈蚀跟踪记录跨度持续时间?

如何使用锈蚀跟踪记录跨度持续时间?
EN

Stack Overflow用户
提问于 2022-09-14 14:04:16
回答 1查看 98关注 0票数 1

铁锈有一个追迹库,看起来很受欢迎。它使用一个名为“span”的构建块:

跨度表示程序执行过程中的一段时间。

既然我已经在我的应用程序中设置了所有的跨度,我如何才能真正记录它们的持续时间呢?

到目前为止我发现:

  • 追踪-定时。很好,但有点详细,打印整个直方图,当我想要简单的持续时间。
  • 追踪树。这个非常接近我正在寻找的东西,目前的设置对我来说是失败的,我会找出它,但这个仍然打印在一棵树上,我正在寻找更多的普通的时间。没有树。

追踪有什么办法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-14 15:55:25

来自追踪-订户的基本格式化层非常灵活,可以记录什么。默认情况下,它只显示日志事件,但还有其他可用于跨范围的事件(新建、输入、退出、关闭)。您会对日志记录“关闭”事件感兴趣,这些事件指示span何时结束,并知道从何时开始使用。

您只需使用.with_span_events()FmtSpan::CLOSE就可以做到这一点。这是一个样本:

代码语言:javascript
运行
复制
[dependencies]
tracing = "0.1.36"
tracing-subscriber = "0.3.15"
代码语言:javascript
运行
复制
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);
    }
}
代码语言:javascript
运行
复制
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实现来进一步定制它。

我想提到的是,追迹是“一个用于检测锈蚀程序以收集结构化的、基于事件的诊断信息的框架”。虽然功能定时是诊断信息的一部分,但它的设计方式是在实地收集这些信息。如果您试图在合成环境中评估代码的性能,我鼓励您使用一个更健壮的基准库,比如标准

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73718229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档