You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Rust的tracing库?event!宏生成的日志该在哪里查看?

问题根因

tracing 是分层设计的事件采集框架,你当前只通过event!、span!宏生成了事件,但没有安装负责收集、过滤、输出事件的订阅器(Subscriber),所有生成的事件都被直接丢弃,自然看不到任何日志输出。

修复步骤

1. 新增依赖

修改你的Cargo.toml,新增tracing-subscriber依赖,它提供了开箱即用的日志输出订阅器实现:

[dependencies]
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }

2. 初始化订阅器

在main函数最开头添加初始化代码,完成日志输出的配置:

use std::fmt::Debug;
use tracing::{span, Level, event};

fn main() {
    // 初始化日志订阅器,默认将日志输出到标准输出(运行程序的终端)
    tracing_subscriber::fmt::init();

    pub fn calculate<T: Debug, const N: usize>(data_set: [T; N]) -> (i32, i32) {
        // Tracing BoilerPlate
        event!(Level::INFO, "something happened");
        let span = span!(Level::INFO, "my_span");
        let _guard = span.enter();
        
        // Key Code 
        let _var = data_set.get(0);
        println!("Output_1: {:?}", data_set.get(0)); 
        
        event!(Level::DEBUG, "something happened inside my_span");
        
        // Ignore
        return (0, 0)
    }

    let data = [1509, 1857, 1736, 1815, 1576];
    let _result = calculate(data);
}

3. 运行查看日志

  • 默认配置下,订阅器只会输出INFO及更高级别的日志,直接运行cargo run就能在终端看到something happened的INFO日志。
  • 如果要查看DEBUG级别的日志,需要在运行时设置RUST_LOG环境变量:
    • Linux/macOS 终端执行:RUST_LOG=debug cargo run
    • Windows CMD 执行:set RUST_LOG=debug && cargo run
    • Windows PowerShell 执行:$env:RUST_LOG="debug"; cargo run
基础使用说明
  • 日志级别优先级从高到低为:ERROR > WARN > INFO > DEBUG > TRACE,级别越低输出的信息越详细。
  • 除了直接输出到终端,你也可以通过配置tracing-subscriber将日志输出到文件、发送到采集服务等,入门场景默认的终端输出足够调试使用。
  • span 可以用来给日志添加上下文关联,同一个span内输出的日志都会自动带上span的标记,方便排查链路问题。

内容的提问来源于stack exchange,提问作者RowSalmon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:45:00