#tracing #line-numbers #logging-tracing #individual #logging #events #spans

tracing-line-filter

通过行号启用单个事件的 tracing 过滤器

1 个不稳定版本

0.1.0 2021年1月6日

#18#individual

MIT 许可协议

20KB
132 行(不包括注释)

tracing-line-filter

一个通过行号启用单个 spanseventstracing 过滤器。

Crates.io Documentation MIT licensed Build Status maintenance status

tracing 是一个用于收集作用域、结构化和异步感知诊断的框架。`tracing-subscriber` 包中的 `EnvFilter` 类型提供了一种机制,通过匹配它们的目标、详细程度和字段来控制收集哪些 `spans` 和 `events`。然而,在某些情况下,可以非常有用,以更细粒度地切换单个 spans 或 events。因此,此包提供了一个基于它们的模块路径/文件路径和行号的过滤 `Layer`,以启用单个 spans 和 events。

由于此过滤器的实现相对简单,因此此包的源代码对于想要实现自己的过滤逻辑的 tracing 用户来说也是很有用的示例。

使用方法

首先,将以下内容添加到您的 Cargo.toml 中

tracing-line-filter = "0.1"

示例

通过行号启用事件

use tracing_line_filter::LineFilter;
mod some_module {
    pub fn do_stuff() {
        tracing::info!("i'm doing stuff");
        tracing::debug!("i'm also doing stuff!");
    }
}

fn main() {
    use tracing_subscriber::prelude::*;

    let mut filter = LineFilter::default();
    filter
        .enable_by_mod("my_crate::some_module", 6)
        .enable_by_mod("my_crate", 25)
        .enable_by_mod("my_crate", 27);

    tracing_subscriber::registry()
        .with(tracing_subscriber::fmt::layer().pretty())
        .with(filter)
        .init();

    tracing::info!("i'm not enabled");
    tracing::debug!("i'm enabled!");
    some_module::do_stuff();
    tracing::trace!("hi!");
}

LineFiltertracing_subscriberEnvFilter 链接起来

use tracing_line_filter::LineFilter;
use tracing_subscriber::EnvFilter;

mod some_module {
    pub fn do_stuff() {
        tracing::info!("i'm doing stuff");
        tracing::debug!("i'm also doing stuff!");
        // This won't be enabled, because it's at the TRACE level, and the
        // `EnvFilter` only enables up to the DEBUG level.
        tracing::trace!("doing very verbose stuff");
    }
}

fn main() {
    use tracing_subscriber::prelude::*;

    let mut filter = LineFilter::default();
    filter
        .enable_by_mod("with_env_filter", 30)
        .enable_by_mod("with_env_filter", 33)
        // use an `EnvFilter` that enables DEBUG and lower in `some_module`,
        // and everything at the ERROR level.
        .with_env_filter(EnvFilter::new("error,with_env_filter::some_module=debug"));

    tracing_subscriber::registry()
        .with(tracing_subscriber::fmt::layer().pretty())
        .with(filter)
        .init();

    tracing::info!("i'm not enabled");
    tracing::debug!("i'm enabled!!");
    some_module::do_stuff();
    tracing::trace!("hi!");

    // This will be enabled by the `EnvFilter`.
    tracing::error!("an error!");
}

依赖关系

~2.1–8MB
~46K SLoC