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
,用于启用记录自定义复合类型,如 struct
s 和 enum
s。自定义类型必须实现 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