如何向 rust stderr 添加时间戳

问题描述 投票:0回答:1

我使用 tokio 来处理异步代码,使用 env_logger 来处理标准输出。

所以在标准输出中清楚事件发生的时间:

[2023-11-29T02:30:03Z INFO  myapp] connected success

但仅在 stderr 中:

Error: Io(Os { code: 111, kind: ConnectionRefused, message: "Connection refused" })

如何让错误日志信息更丰富? (例如时间戳)

logging rust stderr rust-tokio
1个回答
0
投票

以下是实现此目标的分步指南:

  1. 确保 Cargo.toml 中的依赖关系:首先,确保您的

    env_logger
    文件中有
    Cargo.toml
    作为依赖关系。

    [dependencies]
    env_logger = "0.9"  # Check for the latest version
    tokio = { version = "1", features = ["full"] }
    
  2. 配置 env_logger:在主函数中或异步代码启动之前,配置

    env_logger
    。您可以使用
    Builder
    自定义格式,包括时间戳。

    use env_logger::Builder;
    use std::io::Write;
    
    fn main() {
        Builder::new()
            .format(|buf, record| writeln!(buf, "{}: {}", chrono::Utc::now().to_rfc3339(), record.args()))
            .init();
    
        // Your async tokio code here
    }
    

    在此示例中,我使用

    chrono
    作为时间戳。如果您选择使用它,请确保将
    chrono
    添加到您的依赖项中:

    [dependencies]
    chrono = "0.4"  # Check for the latest version
    
  3. 记录错误:记录错误时,请确保使用

    log
    提供的日志宏,它是
    env_logger
    的依赖项。这可确保日志被
    env_logger
    捕获并进行相应的格式化。

    log::error!("Error: {:?}", your_error_here);
    
  4. 运行您的应用程序:运行应用程序时,您可以通过环境变量控制日志记录级别和目标。例如:

    RUST_LOG=error cargo run
    

    这将确保捕获所有错误日志并使用时间戳显示。

© www.soinside.com 2019 - 2024. All rights reserved.