如何使用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
- Linux/macOS 终端执行:
基础使用说明
- 日志级别优先级从高到低为:ERROR > WARN > INFO > DEBUG > TRACE,级别越低输出的信息越详细。
- 除了直接输出到终端,你也可以通过配置
tracing-subscriber将日志输出到文件、发送到采集服务等,入门场景默认的终端输出足够调试使用。 - span 可以用来给日志添加上下文关联,同一个span内输出的日志都会自动带上span的标记,方便排查链路问题。
内容的提问来源于stack exchange,提问作者RowSalmon
相关产品推荐
相关产品推荐

