log
1. log
和 env_logger
log
是 Rust 的标准日志记录库,它定义了一套统一的接口,供其他日志库实现。env_logger
是一个简单的日志记录实现,基于环境变量来配置日志级别和格式。
使用示例
首先,将 log
和 env_logger
添加到你的 Cargo.toml
文件中:
[dependencies]
log = "0.4"
env_logger = "0.10"
然后,在你的代码中初始化日志记录器并记录日志:
use log::{info, warn, error};
use env_logger;
fn main() {
env_logger::init();
info!("This is an info message.");
warn!("This is a warning message.");
error!("This is an error message.");
}
在运行程序时,你可以通过设置 RUST_LOG
环境变量来控制日志级别。例如:
RUST_LOG=info cargo run
2. slog
slog
是一个结构化日志记录库,提供了更多的灵活性和扩展性。它支持多种格式、输出目标以及更加细粒度的控制。
使用示例
首先,将 slog
及其相关依赖添加到你的 Cargo.toml
文件中:
[dependencies]
slog = "2.7"
slog-async = "2.7"
slog-term = "2.9"
然后,在你的代码中初始化 slog
日志记录器并记录日志:
use slog::{Drain, Logger, o, info, warn, error};
use slog_async;
use slog_term;
fn main() {
let decorator = slog_term::TermDecorator::new().build();
let drain = slog_term::CompactFormat::new(decorator).build().fuse();
let drain = slog_async::Async::new(drain).build().fuse();
let log = Logger::root(drain, o!());
info!(log, "This is an info message.");
warn!(log, "This is a warning message.");
error!(log, "This is an error message.");
}
3. fern
fern
是另一个流行的日志库,它允许用户灵活地设置日志格式和输出目标。fern
是基于 log
接口的。
使用示例
首先,将 fern
和 log
添加到你的 Cargo.toml
文件中:
[dependencies]
fern = "0.6"
log = "0.4"
然后,在你的代码中初始化 fern
日志记录器并记录日志:
use fern::Dispatch;
use log::{info, warn, error};
fn main() {
fern::Dispatch::new()
.format(|out, message, record| {
out.finish(format_args!(
"{}[{}][{}] {}",
chrono::Local::now().format("[%Y-%m-%d %H:%M:%S]"),
record.target(),
record.level(),
message
))
})
.level(log::LevelFilter::Info)
.chain(std::io::stdout())
.apply()
.unwrap();
info!("This is an info message.");
warn!("This is a warning message.");
error!("This is an error message.");
}
4. flexi_logger
flexi_logger
提供了非常灵活的日志记录配置选项,包括日志文件滚动、不同日志级别的不同输出目标等。
使用示例
首先,将 flexi_logger
和 log
添加到你的 Cargo.toml
文件中:
[dependencies]
flexi_logger = "0.22"
log = "0.4"
然后,在你的代码中初始化 flexi_logger
日志记录器并记录日志:
use flexi_logger::{Logger, WriteMode};
use log::{info, warn, error};
fn main() {
Logger::try_with_str("info")
.unwrap()
.write_mode(WriteMode::BufferAndFlush)
.start()
.unwrap();
info!("This is an info message.");
warn!("This is a warning message.");
error!("This is an error message.");
}
总结
log
和env_logger
:简单、快速设置,适合大多数常见的日志记录需求。slog
:适合需要结构化日志记录、高度可扩展性的场景。fern
:灵活的日志配置,适合需要自定义格式和输出的场景。flexi_logger
:提供文件滚动、不同日志级别不同输出目标的高级功能。
根据你的具体需求选择合适的日志库,以上示例展示了如何使用这些库进行日志记录。