7个版本
0.1.6 | 2023年6月19日 |
---|---|
0.1.5 | 2022年10月25日 |
0.1.4 | 2022年5月12日 |
0.1.3 | 2022年1月22日 |
#46 in 调试
22,942 每月下载量
用于 32 个crate(15个直接使用)
98KB
1.5K SLoC
tracing-forest
保留并发任务跟踪数据的上下文一致性。
概述
tracing
是一个框架,用于通过 Subscriber
特性来收集结构和异步感知的诊断信息。 tracing-subscriber
crate 提供了将 Subscriber
组合在一起的工具。这个crate通过提供 ForestLayer
,一个 Layer
,在记录时保留并发任务跟踪数据的上下文一致性来扩展 tracing-subscriber
。
这个crate旨在用于运行许多非平凡且不重叠任务的程序,如服务器后端。与其他仅跟踪事件上下文的 Subscriber
不同,tracing-forest
在并行环境中写入日志时也保留了上下文一致性,使得读者可以轻松追踪同一任务的事件序列。
tracing-forest
适用于编写应用程序。
入门
最简单的方法是启用所有功能。通过将以下内容添加到你的 Cargo.toml
文件来实现
tracing-forest = { version = "0.1.6", features = ["full"] }
然后,将 tracing_forest::init
添加到你的主函数中
fn main() {
tracing_forest::init();
// ...
}
上下文一致性实例
类似于这个crate,tracing-tree
crate 会收集和以树状结构写入跟踪数据。与这个crate不同,它不维护并行环境中的上下文一致性。
观察以下程序,它模拟了同时为多个客户端提供服务。
use tracing::info;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, Registry};
use tracing_tree::HierarchicalLayer;
#[tracing::instrument]
async fn conn(id: u32) {
for i in 0..3 {
some_expensive_operation().await;
info!(id, "step {}", i);
}
}
#[tokio::main(flavor = "multi_thread")]
async fn main() {
// Use a `tracing-tree` subscriber
Registry::default()
.with(HierarchicalLayer::default())
.init();
let connections: Vec<_> = (0..3)
.map(|id| tokio::spawn(conn(id)))
.collect();
for conn in connections {
conn.await.unwrap();
}
}
tracing-tree
不适用于并发使用,这可以通过程序输出得到证明。
conn id=2
conn id=0
conn id=1
23ms INFO step 0, id=2
84ms INFO step 0, id=1
94ms INFO step 1, id=2
118ms INFO step 0, id=0
130ms INFO step 1, id=1
193ms INFO step 2, id=2
217ms INFO step 1, id=0
301ms INFO step 2, id=1
326ms INFO step 2, id=0
我们可以使用 tracing-forest
作为 tracing-tree
的直接替代品。
use tracing::info;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, Registry};
use tracing_forest::ForestLayer;
#[tracing::instrument]
async fn conn(id: u32) {
// -- snip --
}
#[tokio::main(flavor = "multi_thread")]
async fn main() {
// Use a `tracing-forest` subscriber
Registry::default()
.with(ForestLayer::default())
.init();
// -- snip --
}
现在我们可以轻松追踪发生了什么。
INFO conn [ 150µs | 100.00% ] id: 1
INFO ┝━ i [info]: step 0 | id: 1
INFO ┝━ i [info]: step 1 | id: 1
INFO ┕━ i [info]: step 2 | id: 1
INFO conn [ 343µs | 100.00% ] id: 0
INFO ┝━ i [info]: step 0 | id: 0
INFO ┝━ i [info]: step 1 | id: 0
INFO ┕━ i [info]: step 2 | id: 0
INFO conn [ 233µs | 100.00% ] id: 2
INFO ┝━ i [info]: step 0 | id: 2
INFO ┝━ i [info]: step 1 | id: 2
INFO ┕━ i [info]: step 2 | id: 2
许可证
tracing-forest
是开源软件,遵循 MIT 许可证分发。
依赖关系
~1.5–4.5MB
~77K SLoC