| Crates.io | rust-happy-log |
| lib.rs | rust-happy-log |
| version | 0.1.0 |
| created_at | 2025-10-06 08:12:35.196445+00 |
| updated_at | 2025-10-06 08:12:35.196445+00 |
| description | 一个美观、高性能的 Rust 日志库,支持控制台和文件输出,全局单例,零侵入 |
| homepage | |
| repository | https://github.com/yourusername/rust-happy-log |
| max_upload_size | |
| id | 1869916 |
| size | 70,318 |
一个美观、高性能的 Rust 日志库,支持控制台和文件输出。
在 Cargo.toml 中添加依赖:
[dependencies]
rust-happy-log = "0.1"
use rust_happy_log::{LoggerBuilder, Level, info, warn, error};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 初始化全局日志器(仅需一次)
LoggerBuilder::new()
.level(Level::Info)
.console(true)
.init()?;
// 在任意位置使用便捷宏
info!("应用启动");
warn!("这是一个警告: {}", "注意");
error!("发生错误: {}", "错误信息");
Ok(())
}
use rust_happy_log::{LoggerBuilder, Level, info};
fn main() -> Result<(), Box<dyn std::error::Error>> {
LoggerBuilder::new()
.level(Level::Info)
.console(true) // 控制台输出
.file("logs/app.log") // 文件输出
.file_max_size(10 * 1024 * 1024) // 10MB 轮转
.file_max_backups(5) // 保留 5 个备份
.init()?;
info!("日志将同时输出到控制台和文件");
Ok(())
}
use rust_happy_log::{LoggerBuilder, Level, info, error};
// 模块 A
mod auth {
use rust_happy_log::info;
pub fn login(user: &str) {
info!("用户 {} 登录", user); // 直接使用,无需传递 Logger
}
}
// 模块 B
mod database {
use rust_happy_log::error;
pub fn query(sql: &str) {
error!("查询失败: {}", sql); // 直接使用全局实例
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 仅在主函数初始化一次
LoggerBuilder::new()
.level(Level::Info)
.console(true)
.init()?;
// 各模块直接使用,无需传递 Logger 实例
auth::login("admin");
database::query("SELECT * FROM users");
Ok(())
}
控制台彩色输出效果:
[2025-10-06 15:24:30.123] 🔍 TRACE 这是追踪级别日志
[2025-10-06 15:24:30.124] 🐛 DEBUG 这是调试级别日志
[2025-10-06 15:24:30.125] ℹ️ INFO 应用启动成功
[2025-10-06 15:24:30.126] ⚠️ WARN 这是一个警告
[2025-10-06 15:24:30.127] ❌ ERROR 发生错误
use rust_happy_log::{LoggerBuilder, Level};
LoggerBuilder::new()
// 日志级别
.level(Level::Debug)
// 控制台配置
.console(true) // 启用控制台输出
.console_color(true) // 彩色输出
.console_emoji(true) // emoji 图标
.console_thread(true) // 显示线程 ID
.console_location(true) // 显示文件位置(文件名:行号)
// 文件配置
.file("logs/app.log") // 日志文件路径
.file_max_size(10 * 1024 * 1024) // 最大 10MB
.file_max_backups(5) // 保留 5 个备份文件
.init()
.expect("日志初始化失败");
Level::Trace: 最详细的日志,用于追踪程序执行Level::Debug: 调试信息Level::Info: 一般信息(默认)Level::Warn: 警告信息Level::Error: 错误信息use rust_happy_log::{Logger, Level};
// 获取全局 Logger 并调整级别
if let Ok(logger) = Logger::global() {
logger.set_level(Level::Debug);
}
trace!("追踪信息: {}", value);
debug!("调试信息: {}", value);
info!("一般信息: {}", value);
warn!("警告信息: {}", value);
error!("错误信息: {}", value);
所有宏都支持 format! 风格的格式化。
once_cell::OnceCell 实现线程安全的全局实例crossbeam-channel 实现无锁队列parking_lot::Mutex 替代标准库 Mutex,性能更优BufWriter 缓冲,减少系统调用查看 examples/ 目录获取更多示例:
# 基础使用
cargo run --example basic
# 文件输出
cargo run --example file_output
# 多模块使用
cargo run --example multi_module
# 高级配置
cargo run --example advanced
# 检查代码
cargo check
# 运行测试
cargo test
# 格式化代码
cargo fmt
# Clippy 检查
cargo clippy
# 构建文档
cargo doc --open
本项目采用双许可证:
您可以选择其中任意一个许可证使用本项目。
欢迎提交 Issue 和 Pull Request!
本项目使用了以下优秀的 Rust 库:
colored - 彩色终端输出crossbeam-channel - 高性能并发通道once_cell - 单例模式支持thiserror - 错误处理chrono - 时间处理parking_lot - 高性能同步原语