如何在跟踪中使用动态跨度名称?

Net*_*ave 8 trace rust rust-tracing

我需要动态地使用不同名称来检测跨度。如何创建具有动态命名的跟踪范围?

use tracing; // 0.1.22

fn main() {
    let name: &'static str = "foo bar";
    let span = tracing::span!(tracing::Level::TRACE, name);
    let span_handle = span.enter();
    tracing::info!("Hello, world!");
    drop(span_handle);
}
Run Code Online (Sandbox Code Playgroud)
error[E0435]: attempt to use a non-constant value in a constant
 --> src/main.rs:5:54
  |
5 |     let span = tracing::span!(tracing::Level::TRACE, name);
  |                                                      ^^^^ non-constant value
Run Code Online (Sandbox Code Playgroud)

操场

She*_*ter 3

不要尝试动态设置跨度的名称,而是添加一个字段:

let value = "forty-two";
let span = tracing::span!(tracing::Level::TRACE, "foo bar", value = value);
Run Code Online (Sandbox Code Playgroud)

来自文档

Span 由fields、用户定义的任意数据的键值对组成,这些数据描述了 Span 所代表的上下文