#tracing-subscriber #tracing #tokio #async #tokio-task #async-executor

ari-subscriber

异步执行器仪表化可观察性工具:一个将Tokio跟踪仪表化输出到终端以便于调试的跟踪订阅者层

2个版本

0.0.2 2024年3月11日
0.0.1 2023年11月29日

调试 中排名 #605

Download history 106/week @ 2024-07-30

每月下载量 106

MIT许可证 MIT

40KB
464 代码行

异步运行时仪表化订阅者

异步运行时仪表化订阅者 (ari-subscriber) 是一个针对视觉调试Tokio跟踪仪表化进行了优化的 tracing-subscriber

此crate提供了一个 Layer,它将 tracing 信息写入 stdout。它为Tokio中跟踪仪表化产生的跟踪着色,以便于识别。

用法

以下示例将设置一个格式化 tracing_subscriber::Layer,然后将其添加到注册表中。随后生成的任务的输出将显示在 stdout 中。

use tracing_subscriber::prelude::*;

#[tokio::main]
async fn main() {
    let layer = ari_subscriber::layer();

    tracing_subscriber::registry().with(layer).init();

    tokio::spawn(async {
        tokio::time::sleep(std::time::Duration::from_millis(100)).await;
    })
    .await
    .unwrap();
}

一个常见的用例是使用 ari-subscriberconsole-subscriber 一起,它将相同的Tokio跟踪仪表化聚合到Tokio控制台中进行可视化。

use tracing_subscriber::prelude::*;

#[tokio::main]
async fn main() {
    let fmt_layer = ari_subscriber::layer();
    let console_layer = console_subscriber::spawn();

    tracing_subscriber::registry()
        .with(fmt_layer)
        .with(console_layer)
        .init();

    tokio::spawn(async {
        tokio::time::sleep(std::time::Duration::from_millis(100)).await;
    })
    .await
    .unwrap();
}

示例输出

上述程序的输出开头可能是

 2023-11-28T10:06:44.746508Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} new
 2023-11-28T10:06:44.747110Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} enter
 2023-11-28T10:06:44.747340Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} runtime.resource[274877906945]{concrete_type="Sleep", kind="timer", loc.file="examples/tokio-task.rs", loc.line=15, loc.col=9} new
 2023-11-28T10:06:44.747539Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} runtime.resource[274877906945]{concrete_type="Sleep", kind="timer", loc.file="examples/tokio-task.rs", loc.line=15, loc.col=9} enter
 2023-11-28T10:06:44.747683Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} runtime.resource[274877906945]{concrete_type="Sleep", kind="timer", loc.file="examples/tokio-task.rs", loc.line=15, loc.col=9} runtime::resource::state_update: duration=101, duration.unit="ms", duration.op="override"
 2023-11-28T10:06:44.747854Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} runtime.resource[274877906945]{concrete_type="Sleep", kind="timer", loc.file="examples/tokio-task.rs", loc.line=15, loc.col=9} runtime.resource.async_op[274877906946]{source="Sleep::new_timeout"} new
 2023-11-28T10:06:44.747991Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} runtime.resource[274877906945]{concrete_type="Sleep", kind="timer", loc.file="examples/tokio-task.rs", loc.line=15, loc.col=9} exit
 2023-11-28T10:06:44.748118Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} runtime.resource[274877906945]{concrete_type="Sleep", kind="timer", loc.file="examples/tokio-task.rs", loc.line=15, loc.col=9} runtime.resource.async_op[274877906946]{source="Sleep::new_timeout"} enter
 2023-11-28T10:06:44.748196Z TRACE runtime.spawn[1]{kind=task, task.name=, task.id=18, loc.file="examples/tokio-task.rs", loc.line=14, loc.col=5} runtime.resource[274877906945]{concrete_type="Sleep", kind="timer", loc.file="examples/tokio-task.rs", loc.line=15, loc.col=9} runtime.resource.async_op[274877906946]{source="Sleep::new_timeout"} runtime.resource.async_op.poll[274877906947]{} new
 

tracing-subscriber 的比较

ari-subscriber 基于 tracing-subscriber 构建,并使用其注册表(如大多数 tracing 订阅者一样)。它提供了一种替代方案,用于该crate中的 fmt::Subscriber 和其底层的 fmt::Layer

如果您对使用哪种订阅者格式有疑问,请选择来自 tracing-subscriber 的格式。它更加灵活,毫无疑问,性能也更好。

您只有在有特定需求来可视化Tokio中内置的跟踪仪器时,才会使用 ari-subscriber 格式 Layer

支持的Rust版本

ari-subscriber 是基于最新的稳定版本构建的。最低支持的版本是1.65。目前 ari-subscriber 的版本不能保证在低于最低支持版本的Rust版本上构建。

许可证

本项目遵循 MIT许可证

贡献

除非您明确声明,否则您提交的任何旨在包含在 ari-subscriber 中的贡献,都将按照MIT许可证授权,不附加任何额外条款或条件。

依赖

~2–12MB
~81K SLoC