4个版本 (2个破坏性更新)
0.3.6 | 2024年6月21日 |
---|---|
0.3.0 | 2024年6月21日 |
0.2.0 | 2024年6月21日 |
0.1.0 | 2024年6月21日 |
#69 在 #tracing-subscriber
19KB
201 行
tracing-setup
tracing-setup
是一个Rust crate,它提供了一种结构化的方式来配置和管理带缓冲日志的跟踪。它引入了一个BufferedLayer
,允许捕获并存储跟踪事件到缓冲区,可以根据需要刷新和打印。
特性
- 缓冲日志:在缓冲区中捕获跟踪事件。
- 自定义输出:支持不同的事件打印类型。
- 刷新机制:将缓冲事件刷新到控制台。
- 订阅者集成:轻松与
tracing
订阅者集成。
用法
添加依赖
将以下内容添加到您的Cargo.toml
[dependencies]
tracing = "0.1.40"
tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt", "std", "env-filter"] }
colored = "2.1.0"
示例
以下是使用tracing-setup的示例
use tracing_setup::{configure_tracing, setup_buffered_tracing};
use tracing::{info, Level};
use std::sync::Arc;
fn main() {
configure_tracing();
let buffered_subscriber = setup_buffered_tracing(Some("example-tag"));
// Use the tracing macros to generate events
info!("This is an informational message");
// Flush the buffered events
buffered_subscriber.flush();
}
如果我们还使用traced-test
,我们可以做以下操作
use traced_test::traced_test;
#[traced_test]
fn example_test() -> Result<(),()> {
info!("running an example test!");
assert_eq!(1 + 1, 2);
Ok(())
}
结构和特征
BufferedLayer
一个捕获跟踪事件并将其存储在缓冲区中的层。
pub struct BufferedLayer {
tag: Option<String>,
buffer: Arc<Mutex<Vec<String>>>,
}
方法
new(tag: &str) -> Self
:创建一个新的带有指定标记的BufferedLayer。
flush(&self)
:将缓冲事件刷新到控制台。
BufferedSubscriberLayer
一个包含BufferedLayer的订阅者层。
pub struct BufferedSubscriberLayer<S> {
inner: tracing_subscriber::layer::Layered<BufferedLayer, S>,
buffered_layer: Arc<BufferedLayer>,
}
方法
flush(&self)
:使用内部BufferedLayer刷新缓冲事件。
Flushable
一个用于刷新缓冲事件的特质。
pub trait Flushable {
fn flush(&self);
}
函数
configure_tracing
初始化日志订阅者。
pub fn configure_tracing() {
static INIT: std::sync::Once = std::sync::Once::new();
INIT.call_once(|| {
let filter = tracing_subscriber::EnvFilter::from_default_env()
.add_directive(Level::DEBUG.into());
tracing_subscriber::fmt()
.with_env_filter(filter)
.init();
});
}
setup_buffered_tracing
设置带有可选标记的缓冲跟踪订阅者。
pub fn setup_buffered_tracing(tag: Option<&str>) -> Arc<BufferedSubscriberLayer<Registry>> {
let buffered_layer = match tag {
Some(tag) => BufferedLayer::new(tag),
None => BufferedLayer::default()
};
Arc::new(BufferedSubscriberLayer {
inner: Registry::default().with(buffered_layer.clone()),
buffered_layer: buffered_layer.into(),
})
}
许可
此crate受MIT许可的许可。
依赖
~5–17MB
~154K SLoC