日志与 tracing
学习目标
- 掌握
tracing 基本用法
- 理解 span 和 event
- 掌握日志级别
核心概念
基本日志
[dependencies]
tracing = "0.1"
tracing-subscriber = "0.3"
use tracing::{info, warn, error, debug, trace};
fn main() {
tracing_subscriber::fmt::init();
info!("应用启动");
debug!("调试信息: x = {}", 42);
warn!("警告: 内存使用率高");
error!("错误: 连接失败");
trace!("跟踪: 进入函数");
}
Span(上下文)
use tracing::{info_span, Instrument};
async fn process_request(id: u32) {
let span = info_span!("request", id);
let _guard = span.enter();
info!("开始处理");
info!("处理完成");
}
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
process_request(42).await;
}
结构化日志
use tracing::{info, warn};
fn main() {
tracing_subscriber::fmt::init();
let user = "alice";
let count = 42;
info!(user, count, "用户登录");
warn!(user, "尝试次数过多");
}
过滤
use tracing_subscriber::EnvFilter;
fn main() {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.init();
tracing::debug!("这条消息需要设置 RUST_LOG=debug");
}
小结
| 宏 | 级别 |
|---|
error! | 错误 |
warn! | 警告 |
info! | 信息 |
debug! | 调试 |
trace! | 跟踪 |
info_span! | 创建上下文 |