1 个不稳定版本
0.1.0 | 2021年1月6日 |
---|
#18 在 #individual
20KB
132 行(不包括注释)
tracing-line-filter
一个通过行号启用单个 spans 和 events 的 tracing
过滤器。
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!");
}
将 LineFilter
与 tracing_subscriber
的 EnvFilter
链接起来
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