2 个不稳定版本
0.2.0-beta.1 | 2024 年 3 月 3 日 |
---|---|
0.1.0 | 2022 年 12 月 9 日 |
在 调试 中排名第 117
每月下载量 11,203
在 4 个 crates 中使用(通过 tracing-capture)
79KB
1.5K SLoC
跨 API 边界传输跟踪信息
此 crate 提供了 tracing 基础设施助手,允许跨 API 边界传输跟踪事件
TracingEventSender
是一个跟踪Subscriber
,它将跟踪事件转换为(反)可序列化的表示形式,可以通过自定义钩子发送到其他地方。TracingEventReceiver
消耗由TracingEventSender
产生的事件并将它们转发到跟踪基础设施。假设事件源可能比特定TracingEventReceiver
实例的生命周期和封装接收器的程序的生命周期都要长。为了处理这个问题,接收器提供了持久化/恢复其状态的手段。
这解决了拥有 动态 跟踪跨度/事件的调用点的问题,即编译期间未知的问题。如果调用点在动态加载的模块中定义,并且其执行被嵌入到程序中,例如 WASM 模块,则可能会发生这种情况。
有关 crate 设计和潜在用例的详细信息,请参阅 crate 文档。
用法
将此添加到您的 Crate.toml
[dependencies]
tracing-tunnel = "0.2.0-beta.1"
请注意,上述两种功能都受 opt-in 功能的限制;有关详细信息,请参阅 crate 文档。
发送跟踪事件
use std::sync::mpsc;
use tracing_tunnel::{TracingEvent, TracingEventSender, TracingEventReceiver};
// Let's collect tracing events using an MPSC channel.
let (events_sx, events_rx) = mpsc::sync_channel(10);
let subscriber = TracingEventSender::new(move |event| {
events_sx.send(event).ok();
});
tracing::subscriber::with_default(subscriber, || {
tracing::info_span!("test", num = 42_i64).in_scope(|| {
tracing::warn!("I feel disturbance in the Force...");
});
});
let events: Vec<TracingEvent> = events_rx.iter().collect();
println!("{events:?}");
// Do something with events...
接收跟踪事件
use std::sync::mpsc;
use tracing_tunnel::{
LocalSpans, PersistedMetadata, PersistedSpans, TracingEvent, TracingEventReceiver,
};
tracing_subscriber::fmt().pretty().init();
fn replay_events(events: &[TracingEvent]) {
let mut spans = PersistedSpans::default();
let mut local_spans = LocalSpans::default();
let mut receiver = TracingEventReceiver::default();
for event in events {
if let Err(err) = receiver.try_receive(event.clone()) {
tracing::warn!(%err, "received invalid tracing event");
}
}
// Persist the resulting receiver state. There are two pieces
// of the state: metadata and alive spans. The spans are further split
// into the persisted and local parts.
let metadata = receiver.persist_metadata();
let (spans, local_spans) = receiver.persist();
// Store `metadata` and `spans`, e.g., in a DB, and `local_spans`
// in a local data struct such as `HashMap` keyed by the executable ID.
}
许可协议
根据您的选择,该项目受Apache License, Version 2.0或MIT许可证许可。
除非您明确说明,否则根据Apache-2.0许可证定义,您提交的旨在包含在tracing-toolbox
中的任何贡献,将按上述方式双许可,不附加任何额外的条款或条件。
依赖项
~0.5–1.1MB
~25K SLoC