#tracing #tracing-subscriber #macro

tracing-setup

这个crate帮助我们为Rust项目配置跟踪。它旨在与traced-test crate一起使用。

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


用于 gpt-batch-scribe

MIT 许可

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