我使用tracing,我只想看到我自己的调试事件。然而,我依赖的一些crate也有跟踪支持,它们会破坏事件流。所以当我将详细程度增加到DEBUG
时,我会在日志中看到很多这样的事件:
2022-08-04T20:52:24.523161Z DEBUG hyper::proto::h1::io: flushed 1008 bytes
字符串
我试图通过在这些调用周围添加span来关闭这些事件:
let response = {
let span = tracing::info_span!("my_span");
let _guard = span.enter();
client
// set up the request
.send()
.await
};
型
我期望那些第三方DEBUG
事件会消失,因为span的详细级别是INFO
。但是它们仍然存在。docs of spans对于span的详细级别的真正含义来说有点轻,所以我的解释可能完全错误。
如何设置依赖crate的详细级别,以便在跟踪日志中只显示我自己的DEBUG
事件?
我使用环境变量RUST_LOG=debug
设置详细级别,并像这样设置tracing-subscriber:
tracing_subscriber::fmt::init();
型Cargo.toml
相关部分:
tracing = "0.1.36"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
型
2条答案
按热度按时间zqdjd7g91#
由于您在使用
"env-filter"
时启用了"env-filter"
功能,因此它可以从您的环境中读取数据,因此您已经拥有了根据自己的喜好过滤日志所需的所有组件。您可以简单地设置
RUST_LOG
如下(插入您自己的crate为“mycrate”):字符串
这将禁用所有跟踪事件的日志记录,除非它们来自“mycrate”,如果它们处于调试级别或更高级别,则会记录日志。您可以阅读
EnvFilter
指令的文档以获得更多自定义。pjngdqdw2#
要以编程方式执行此操作,请执行以下操作:
字符串
add_directive()
方法接受一个Directive
,如果您正在编写CLI工具,也可以基于命令行参数创建该Directive
。