77·常用生态进阶

日志与 tracing

日志与 tracing

学习目标

  1. 掌握 tracing 基本用法
  2. 理解 span 和 event
  3. 掌握日志级别

核心概念

基本日志

[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();

    // RUST_LOG=debug cargo run
    tracing::debug!("这条消息需要设置 RUST_LOG=debug");
}

小结

级别
error!错误
warn!警告
info!信息
debug!调试
trace!跟踪
info_span!创建上下文

练习编辑器

rust
Loading...