2个不稳定版本
0.2.0 | 2023年5月6日 |
---|---|
0.1.2 | 2022年1月24日 |
0.1.1 |
|
0.1.0 |
|
#262 in 调试
6,016每月下载量
用于 2 crates
48KB
1K SLoC
tracing-texray
tracing-texray
是一个 跟踪 层,用于以纯文本形式内省跨度和事件。通过 examine
-ing 特定跨度,当该跨度退出时将输出完整的树。使用如下代码(实际程序省略)
fn main() {
// initialize & install as the global subscriber
tracing_texray::init();
// examine the `load_data` span:
tracing_texray::examine(tracing::info_span!("load_data")).in_scope(|| {
do_a_thing()
});
}
fn do_a_thing() {
// ...
}
你将在标准错误输出看到以下输出
load_data 52ms ├────────────────────────────────┤
download_results{uri: www.crates.io} 11ms ├─────┤
>URI resolved ┼
>connected ┼
compute_stats 10ms ├─────┤
render_response 6ms ├──┤
在不需要像 tracing-chrome 这样的强大解决方案的情况下,tracing-texray
可以渲染事件发生的轻量级时间线。
用法
tracing-texray
结合了两个部分:全局订阅者和本地跨度检查。默认情况下,tracing-texray
不会打印任何内容——它只是静静地坐在后台。但是:一旦检查了跨度,tracing-texray
将跟踪该跨度及其所有子跨度。当跨度退出时,跨度诊断将打印到标准错误(或其他配置的 impl
)。
首先,必须在全局范围内安装层
use std::time::Duration;
use tracing_texray::TeXRayLayer;
use tracing_subscriber::{Registry, EnvFilter, layer::SubscriberExt};
fn main() {
// Option A: Exclusively using tracing_texray:
tracing_texray::init();
// Option B: install the layer in combination with other layers, eg. tracing_subscriber::fmt:
let subscriber = Registry::default()
.with(EnvFilter::try_from_default_env().expect("invalid env filter"))
.with(tracing_subscriber::fmt::layer())
.with(
TeXRayLayer::new()
// by default, all metadata fields will be printed. If this is too noisy,
// fitler only the fields you care about
.only_show_fields(&["name", "operation", "service"])
// only print spans longer than a certain duration
.min_duration(Duration::from_millis(100)),
);
tracing::subscriber::set_global_default(subscriber).unwrap();
}
接下来,使用 examine
包装你想要跟踪的任何跨度
use tracing::info_span;
use tracing_texray::examine;
fn somewhere_deep_in_my_program() {
tracing_texray::examine(info_span!("do_a_thing")).in_scope(|| {
for id in 0..5 {
some_other_function(id);
}
})
}
fn some_other_function(id: usize) {
info_span!("inner_task", id = %id).in_scope(|| tracing::info!("buzz"));
// ...
}
当 do_a_thing
跨度退出时,将打印以下输出
do_a_thing 509μs ├───────────────────────────────────────────────────┤
inner_task{id: 0} 92μs ├────────┤
>buzz ┼
inner_task{id: 1} 36μs ├──┤
>buzz ┼
inner_task{id: 2} 35μs ├──┤
>buzz ┼
inner_task{id: 3} 36μs ├──┤
>buzz ┼
inner_task{id: 4} 35μs ├──┤
>buzz ┼
依赖关系
~1.6–7MB
~33K SLoC