Rust轻量级日志库r3bl_simple_logger的使用,高效简化的日志记录与管理工具
Rust轻量级日志库r3bl_simple_logger的使用
为什么选择R3BL?
R3BL TUI库及应用程序套件专注于开发人员的生产力。该项目正在构建具有丰富文本用户界面(TUI)的Rust命令行应用程序,将终端视为生产力工具,并为其构建各种优秀的应用程序。
介绍
使用r3bl_simple_logger进行日志记录的最简单方法是使用r3bl_rs_utils_core
crate,而不是直接使用此crate。
- 主要入口点是
r3bl_rs_utils_core::try_to_set_log_level
函数 - 默认情况下,即使调用
r3bl_rs_utils_core
crate中file_logger
模块的所有函数(log_debug
,log_info
,log_trace
等),日志记录也是禁用的
如何自定义或更改日志实现
r3bl_simple_logger
提供了一系列日志记录设施,可以轻松组合使用:
SimpleLogger
- 基本的日志记录器,记录到stdoutTermLogger
- 高级终端日志记录器,分割到stdout/err并支持颜色WriteLogger
- 记录到实现Write
的结构,例如文件CombinedLogger
- 可用于组合多个日志记录器TestLogger
- 用于测试的专用日志记录器
完整示例代码
use r3bl_simple_logger::Logger;
use log::{info, warn, error};
fn main() {
// 初始化简单的stdout日志记录器
Logger::init(log::LevelFilter::Info).unwrap();
// 记录不同级别的日志
info!("This is an info message");
warn!("This is a warning message");
error!("This is an error message");
// 组合多个日志记录器的示例
let loggers = vec![
r3bl_simple_logger::SimpleLogger::new(log::LevelFilter::Info),
r3bl_simple_logger::WriteLogger::new(
log::LevelFilter::Error,
std::fs::File::create("error.log").unwrap()
)
];
r3bl_simple_logger::CombinedLogger::init(loggers).unwrap();
// 现在日志会同时输出到stdout和error.log文件
info!("This will only appear in stdout");
error!("This will appear in both stdout and error.log");
}
扩展完整示例
use r3bl_simple_logger::{Logger, SimpleLogger, TermLogger, CombinedLogger};
use log::{debug, info, warn, error, trace};
fn main() {
// 示例1: 使用SimpleLogger
SimpleLogger::new(log::LevelFilter::Debug).init().unwrap();
debug!("Debug message with SimpleLogger");
// 示例2: 使用TermLogger(支持颜色)
TermLogger::init(
log::LevelFilter::Trace,
Default::default(),
TerminalMode::Mixed,
ColorChoice::Auto
).unwrap();
trace!("Trace message with TermLogger");
// 示例3: 组合日志记录器
let loggers = vec![
SimpleLogger::new(log::LevelFilter::Warn),
TermLogger::new(
log::LevelFilter::Info,
Default::default(),
TerminalMode::Stdout,
ColorChoice::Auto
)
];
CombinedLogger::init(loggers).unwrap();
// 这些日志会同时输出到SimpleLogger和TermLogger
warn!("Warning message - will appear in both loggers");
info!("Info message - will only appear in TermLogger");
// 示例4: 文件日志记录
let file_logger = WriteLogger::new(
log::LevelFilter::Error,
Default::default(),
std::fs::File::create("app.log").unwrap()
);
file_logger.init().unwrap();
error!("This error will be written to app.log file");
}
许可证
Apache-2.0
1 回复
Rust轻量级日志库r3bl_simple_logger使用指南
简介
r3bl_simple_logger 是一个轻量级、简单易用的 Rust 日志库,提供了基本的日志记录功能,适合不需要复杂日志配置的小型项目。
主要特性
- 轻量级实现
- 简单的配置方式
- 支持标准日志级别 (error, warn, info, debug, trace)
- 线程安全的日志记录
- 可定制的输出格式
使用方法
1. 添加依赖
在 Cargo.toml
中添加依赖:
[dependencies]
r3bl_simple_logger = "0.2"
log = "0.4"
2. 基本使用
use r3bl_simple_logger::SimpleLogger;
use log::{info, warn, error};
fn main() {
// 初始化日志记录器
SimpleLogger::new().init().unwrap();
// 记录不同级别的日志
info!("This is an info message");
warn!("This is a warning message");
error!("This is an error message");
}
3. 自定义日志级别
use r3bl_simple_logger::SimpleLogger;
use log::LevelFilter;
fn main() {
// 只记录警告及以上级别的日志
SimpleLogger::new()
.with_level(LevelFilter::Warn)
.init()
.unwrap();
log::info!("This won't be logged"); // 不会记录
log::warn!("This will be logged"); // 会记录
}
4. 自定义输出格式
use r3bl_simple_logger::SimpleLogger;
use log::LevelFilter;
fn main() {
// 自定义日志格式
SimpleLogger::new()
.with_level(LevelFilter::Info)
.with_utc_timestamps() // 使用UTC时间
.with_colors(true) // 启用颜色输出
.init()
.unwrap();
log::info!("Formatted log message with timestamp and colors");
}
5. 输出到文件
use r3bl_simple_logger::SimpleLogger;
use std::fs::File;
fn main() {
// 将日志输出到文件
let log_file = File::create("app.log").unwrap();
SimpleLogger::new()
.with_output(log_file)
.init()
.unwrap();
log::info!("This will be written to app.log");
}
6. 多线程示例
use r3bl_simple_logger::SimpleLogger;
use log::info;
use std::thread;
fn main() {
SimpleLogger::new().init().unwrap();
let handles: Vec<_> = (0..5).map(|i| {
thread::spawn(move || {
info!("Thread {} logging a message", i);
})
}).collect();
for handle in handles {
handle.join().unwrap();
}
}
完整示例
下面是一个结合了多种功能的完整示例:
use r3bl_simple_logger::SimpleLogger;
use log::{error, warn, info, debug, trace};
use log::LevelFilter;
use std::fs::File;
use std::thread;
use std::time::Duration;
fn main() {
// 创建日志文件
let log_file = File::create("application.log").unwrap();
// 初始化日志记录器
SimpleLogger::new()
.with_level(LevelFilter::Debug) // 设置日志级别为Debug
.with_utc_timestamps() // 使用UTC时间戳
.with_colors(true) // 启用颜色输出
.with_output(log_file) // 输出到文件
.init()
.unwrap();
// 记录不同级别的日志
error!("严重错误信息");
warn!("警告信息");
info!("常规信息");
debug!("调试信息");
trace!("跟踪信息"); // 不会记录,因为级别设置为Debug
// 多线程日志记录示例
let handles: Vec<_> = (0..3).map(|i| {
thread::spawn(move || {
for j in 0..3 {
info!("线程 {} - 日志消息 {}", i, j);
thread::sleep(Duration::from_millis(100));
}
})
}).collect();
for handle in handles {
handle.join().unwrap();
}
info!("应用程序退出");
}
最佳实践
- 在应用程序启动时尽早初始化日志记录器
- 根据环境变量动态设置日志级别
- 生产环境中考虑将错误日志输出到文件
- 开发时可以使用颜色输出提高可读性
与其他日志库比较
r3bl_simple_logger 比 env_logger 更轻量,比 log4rs 更简单,适合不需要复杂配置的场景。如果你需要更强大的日志功能,可以考虑使用 tracing 或 slog 等更全面的日志解决方案。
总结
r3bl_simple_logger 提供了 Rust 日志系统的一个简单实现,对于小型应用或快速原型开发非常有用。它遵循 Rust 的标准日志接口,可以轻松集成到现有项目中。