我使用 tokio 来处理异步代码,使用 env_logger 来处理标准输出。
所以在标准输出中清楚事件发生的时间:
[2023-11-29T02:30:03Z INFO myapp] connected success
但仅在 stderr 中:
Error: Io(Os { code: 111, kind: ConnectionRefused, message: "Connection refused" })
如何让错误日志信息更丰富? (例如时间戳)
以下是实现此目标的分步指南:
确保 Cargo.toml 中的依赖关系:首先,确保您的
env_logger
文件中有 Cargo.toml
作为依赖关系。
[dependencies]
env_logger = "0.9" # Check for the latest version
tokio = { version = "1", features = ["full"] }
配置 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
记录错误:记录错误时,请确保使用
log
提供的日志宏,它是env_logger
的依赖项。这可确保日志被 env_logger
捕获并进行相应的格式化。
log::error!("Error: {:?}", your_error_here);
运行您的应用程序:运行应用程序时,您可以通过环境变量控制日志记录级别和目标。例如:
RUST_LOG=error cargo run
这将确保捕获所有错误日志并使用时间戳显示。