24次发布
| 0.3.9 | 2023年8月15日 |
|---|---|
| 0.3.8 | 2023年7月16日 |
| 0.3.7 | 2023年3月31日 |
| 0.3.4 | 2022年10月10日 |
| 0.1.6 | 2020年5月12日 |
#23 in 调试
168,884 每月下载量
用于 53 个crates (45直接)
225KB
403 行
tracing-bunyan-formatter
tracing-bunyan-formatter提供了两个用于在tracing Subscriber之上使用的Layer实现的Layer
JsonStorageLayer,用于通过JsonStorage和Span的extensions将上下文信息附加到跨度,以便下游Layer轻松消费;BunyanFormattingLayer,在进入跨度、退出跨度和创建事件时发出bunyan兼容的格式化记录。
重要:每个跨度都将继承其父跨度中附加的所有字段和属性 - 这目前不是tracing_subscriber::fmt::Layer提供的行为。
示例
use tracing_bunyan_formatter::{BunyanFormattingLayer, JsonStorageLayer};
use tracing::instrument;
use tracing::info;
use tracing_subscriber::Registry;
use tracing_subscriber::layer::SubscriberExt;
#[instrument]
pub fn a_unit_of_work(first_parameter: u64) {
for i in 0..2 {
a_sub_unit_of_work(i);
}
info!(excited = "true", "Tracing is quite cool!");
}
#[instrument]
pub fn a_sub_unit_of_work(sub_parameter: u64) {
info!("Events have the full context of their parent span!");
}
fn main() {
let formatting_layer = BunyanFormattingLayer::new("tracing_demo".into(), std::io::stdout);
let subscriber = Registry::default()
.with(JsonStorageLayer)
.with(formatting_layer);
tracing::subscriber::set_global_default(subscriber).unwrap();
info!("Orphan event without a parent span");
a_unit_of_work(2);
}
控制台输出
如果您想通过 bunyan 命令行界面(CLI)管道输出
作为一个纯 Rust 的替代方案,您可以查看 bunyan crate。它包括一个具有与原始 bunyan CLI 相似功能的 CLI 二进制文件,后者是用 JavaScript 编写的。
实现策略
我们追求的分层方法并不一定是最高效的,但它使得分离不同的关注点以及在不同 Layer 之间重用常见逻辑变得更加容易。
虽然当前 crate 并没有野心在 tracing-subscriber 的 Layer 特性之上提供一个通用框架,但通过其公开 API,可以借助 JsonStorageLayer 收集的信息,其他下游层可以使用它进行格式化,而这些层可能并不在这个 crate 内部。这显著降低了您在实现自己的格式化器时需要处理的复杂性,无论出于什么原因或目的。
您还可以在 JsonStorageLayer 之后添加另一个 enrich 层来收集有关每个 span 的附加信息,并将其存储在 JsonStorage 中。我们本可以采取这种组合方法来将 elapsed_milliseconds 添加到每个 span 中,而不是将其嵌入到 JsonStorage 本身。
可选特性
您可以通过启用 arbitrary_precision 特性来处理任意大小的数字,而不会丢失信息。请注意 已知问题与未标记的反序列化。
有价值的
tracing crate 有一个不稳定的特性 valuable,用于启用记录自定义复合类型,如 structs 和 enums。自定义类型必须实现 valuable crate 的 Valuable 特性,该特性可以通过宏推导。
要使用 tracing 和 tracing-bunyan-formatter 与 valuable,您必须在您的二进制文件中设置以下配置(截至 2023-03-29 的当前 crate 版本)
-
为
tracing依赖项启用特性标志valuable。 -
将
--cfg tracing_unstable参数添加到您的 rustc 标志中(请参阅tracing的文档)。这可以通过几种方式完成-
将参数添加到您的二进制包的
.cargo/config.toml中的build.rustflags下。请参阅cargo配置参考文档)。示例
[build] rustflags = "--cfg tracing_unstable" -
在运行
cargo时将参数添加到RUSTFLAGS环境变量中。请参阅cargo环境变量文档)。示例
RUSTFLAGS="--cfg tracing_unstable" cargo build
-
-
为
tracing-bunyan-formatter依赖项启用特性标志valuable。 -
添加依赖
valuable。 -
可选:如果您想为您自定义类型推导出
Valuable特性,请为valuable依赖项启用功能标志derive。
更多详细信息请参阅示例 examples/valuable.rs。
测试
只需运行 cargo test。
要启用 valuable 功能并运行额外测试,请运行
RUSTFLAGS='--cfg tracing_unstable' \
cargo test --target-dir target/debug_valuable --features "valuable valuable/derive"
RUSTFLAGS='--cfg tracing_unstable' \
cargo run --example valuable --target-dir target/debug_valuable --features "valuable valuable/derive"
依赖项
~3.5–4.5MB
~72K SLoC