| Crates.io | log-full |
| lib.rs | log-full |
| version | 0.0.1 |
| created_at | 2025-08-14 13:00:06.197089+00 |
| updated_at | 2025-08-14 13:00:06.197089+00 |
| description | A simple, asynchronous log library |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1794840 |
| size | 87,598 |
简单异步日志库,基于log库
基于官方log库实现,切换容易
支持分类设置日志级别
终端使用 ansi color 输出日志
支持同步与异步日志方式
异步日志可选线程模式及tokio的协程模式
支持输出到控制台与文件
日志文件支持设置最大长度
cargo add log-full
use std::{fs, path::Path, thread, time::Duration};
fn main() {
// 日志配置
let log_level = "trace"; // 改为trace级别以显示所有日志
let log_max = "100k";
let log_file = "app.log";
let log_dir = "logs";
let enable_console_log = true;
// 验证配置参数
log_full::parse_level(log_level).unwrap();
log_full::parse_size(log_max).unwrap();
// 构建日志文件路径
let log_file_path = if log_dir.is_empty() {
log_file.to_string()
} else {
// 确保日志目录存在
if let Err(e) = fs::create_dir_all(log_dir) {
eprintln!("Failed to create log directory {}: {}", log_dir, e);
}
Path::new(log_dir)
.join(log_file)
.to_string_lossy()
.to_string()
};
// 配置日志 - 展示自定义配置选项
let builder = log_full::Builder::new()
.level_str(log_level)
.unwrap()
.log_file(log_file_path)
.log_file_max_str(log_max)
.unwrap()
.use_console(enable_console_log)
.use_async(true)
.show_process_id(true) // 显示进程ID
.show_thread_info(true) // 显示线程信息
.show_module_path(true) // 显示模块路径
.highlight_keywords(vec!["ERROR".to_string(), "WARN".to_string(), "重要".to_string(),"关键词".to_string(),"线程".to_string()]); // 设置关键词高亮
builder.builder().unwrap();
println!("=== 日志配置完成,开始测试不同配置选项 ===");
// 测试默认配置(显示所有信息)
println!("\n--- 测试1: 默认配置(显示所有信息) ---");
// 演示不同级别的日志输出
println!("=== 日志系统演示 ===");
log::trace!("这是一条 TRACE 级别的日志,用于最详细的调试信息");
log::debug!("这是一条 DEBUG 级别的日志,包含调试信息: {}", "调试数据");
log::info!("这是一条 INFO 级别的日志,记录程序运行状态");
log::warn!("这是一条 WARN 级别的日志,表示潜在问题: {}", "警告信息");
log::error!("这是一条 ERROR 级别的日志,记录错误: {}", "错误详情");
// 测试关键词高亮功能
println!("\n--- 测试关键词高亮功能 ---");
log::info!("这条日志包含关键词 ERROR,应该被高亮显示");
log::info!("这条日志包含关键词 WARN,也应该被高亮显示");
log::info!("这是一条重要的系统消息,包含中文关键词");
log::info!("普通日志消息,不包含任何关键词");
log::error!("严重 ERROR: 数据库连接失败,这是一个重要的错误信息");
println!("\n--- 配置说明 ---");
println!("当前配置:");
println!(" - 显示进程ID: 是");
println!(" - 显示线程信息: 是");
println!(" - 显示模块路径: 是");
println!(" - 日志级别: {}", log_level);
println!("\n注意: 日志系统只能初始化一次,如需测试不同配置,请修改上述配置参数后重新运行程序。");
// 演示结构化日志
log::info!("用户登录: user_id={}, ip={}, timestamp={}", 12345, "192.168.1.100", "2024-08-14T18:23:46Z");
// 演示多线程日志
let handles: Vec<_> = (0..3).map(|i| {
thread::spawn(move || {
thread::sleep(Duration::from_millis(100 * i));
log::info!("线程 {} 执行完成", i);
})
}).collect();
for handle in handles {
handle.join().unwrap();
}
log::info!("日志演示完成,请查看控制台输出和日志文件: {}", log_dir);
// 确保所有日志都被写入
log::logger().flush();
thread::sleep(Duration::from_millis(100));
}