如何关闭其他板条箱发出的跟踪事件?

aed*_*edm 12 rust rust-tracing

我使用跟踪,我只想查看我自己的调试事件。然而,我依赖的一些板条箱也有跟踪支持,它们会乱七八糟的事件流。因此,当我将详细程度增加到 时DEBUG,我会在日志中看到很多这样的内容:

2022-08-04T20:52:24.523161Z DEBUG hyper::proto::h1::io: flushed 1008 bytes
Run Code Online (Sandbox Code Playgroud)

我尝试通过在此类调用周围添加跨度来关闭这些事件:

let response = {
    let span = tracing::info_span!("my_span");
    let _guard = span.enter();
    client
        // set up the request
        .send()
        .await
};
Run Code Online (Sandbox Code Playgroud)

我预计这些第 3 方DEBUG事件会消失,因为跨度的详细程度为INFO。但他们留下了。Span 的文档对Span 的详细程度的真正含义有些了解,所以我的解释可能完全错误。

如何设置依赖包的详细级别,以便只有我自己的DEBUG事件出现在跟踪日志中?

我使用环境变量设置详细级别RUST_LOG=debug,并设置跟踪订阅者,如下所示:

tracing_subscriber::fmt::init();
Run Code Online (Sandbox Code Playgroud)

相关部分Cargo.toml

tracing = "0.1.36"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
Run Code Online (Sandbox Code Playgroud)

kmd*_*eko 12

由于您在启用tracing_subscriber::fmt::init()"env-filter"功能的情况下使用,因此它会从您的环境中读取数据,因此您已经拥有了根据您的喜好过滤日志所需的所有内容。

RUST_LOG您可以像这样简单地设置(为“mycrate”插入您自己的板条箱):

RUST_LOG=none,mycrate=debug
Run Code Online (Sandbox Code Playgroud)

这将禁用所有跟踪事件的日志记录,除非它们来自“mycrate”,如果它们处于 DEBUG 级别或更高级别,则会记录该事件。EnvFilter 您可以阅读指令文档以进行更多自定义。

  • @DerekThurn 上面带有“=none”前缀的内容意味着白名单机制,是的。但您不必列出您打算允许的每个“模块”,只需列出每个“板条箱”即可。我理解 OP 希望只想查看自己的板条箱中的事件,因此白名单会更好。如果需要,您可以将其翻转为黑名单:`=debug,h2=error`(允许所有调试事件,除了来自 h2 板条箱的错误)。 (2认同)