什么是 Rust 的 log 库?
log 库是 Rust 生态系统中用于日志记录的标准抽象层。它提供了一个轻量级的门面(facade),允许开发者编写生成日志的代码,而不必绑定到特定的日志记录器实现(例如 env_logger、simple_logger 或 slog)。这类似于 Python 中流行的 logging 库,但更注重性能和内存安全。
为什么需要 log 库?
log 的主要目标是分离日志的生成与处理。您可以在代码中使用 info!、warn!、error! 等宏,之后通过接入某个后端(例如 env_logger),将输出重定向到控制台、文件或监控系统。这对于以下场景尤其有用:
- 调试复杂系统
- 监控生产环境应用
- 创建不应强制用户指定日志记录方式的库
安装
在 Cargo.toml 中添加:
[dependencies]log = "0.4"env_logger = "0.10" # 用于控制台输出然后执行 cargo build。
主要功能
- 日志宏:
error!、warn!、info!、debug!、trace!— 支持类似println!的字符串格式化。 - 级别过滤: 可通过环境变量
RUST_LOG设置最低日志级别(例如仅显示错误)。 - 可扩展性: 通过
Logtrait 支持自定义日志记录器。 - 安全性: 当日志级别被禁用时,不会影响性能。
Rust 代码示例
use log::{info, warn, error};
fn main() { // 初始化日志记录器 (env_logger) env_logger::init();
let user = "Alice"; let status = 200;
info!("用户 {} 已登录系统", user); warn!("响应状态: {} — 可能是过期的缓存", status); error!("无法连接到数据库: {}", "timeout");}使用 RUST_LOG=info cargo run 运行,即可看到所有 info 级别及以上的消息。
何时使用
log 库非常适合以下场景:
- 任何需要标准日志系统的 Rust 应用(CLI、服务器、工具)。
- 库的开发——让用户自行选择后端。
- 从 Python 迁移的项目:其概念类似于
logging.getLogger()。
如果您需要异步写入文件或结构化的 JSON 日志,请避免使用 log——这种情况下 tracing 或 slog 更合适。