Rust日志记录库paris-log的使用,paris-log提供简洁高效的日志输出功能
Rust日志记录库paris-log的使用,paris-log提供简洁高效的日志输出功能
paris-log是一个允许你将paris
的格式化功能与log
crate结合的库。
使用方法
在Cargo.toml
中添加以下依赖:
[dependencies]
paris-log = "1"
不使用log
的宏:
use log::{info, error, ...};
可以使用paris-log
的宏:
use paris_log::{info, error, ...};
现在你可以使用paris
的格式化功能:
info!("This <cyan>is <bright green>a log</>! <green><tick></>");
如果只需要偶尔使用paris
的格式化功能,可以使用完整路径(例如paris_log::info
)。
paris-log
的宏应该可以像log
宏一样使用;可以像平常一样使用格式化说明符。但它们目前不支持手动指定日志目标。如果需要这个功能,可以提交issue或PR!此外,paris-log
没有log
crate中的log
宏,因为这看起来是重复的。
注意
必须使用一个日志实现与这个crate一起使用,因为
paris-log
内部使用了log
crate。如果不需要log
crate和日志实现提供的额外功能,可以考虑使用paris
本身。
icons
功能
如果使用过paris
,可能注意到日志前面有一个漂亮的图标来表明它是info、error、warn还是success。如果启用icons
功能,paris-log
可以自动添加这些图标:
[dependencies]
paris-log = { version = "1", features = ["icons"] }
info!("This <cyan>is <bright green>a log</>!");
// 没有`icons`功能: This is a log!
// 有`icons`功能: ℹ This is a log!
图标只会添加到error
、warn
和info
宏中。这个功能还添加了success
宏,以实现与paris
的功能对等。(success
宏使用info日志级别)
完整示例代码
下面是内容中提供的示例代码:
// 添加依赖后,在Cargo.toml中:
// [dependencies]
// paris-log = { version = "1", features = ["icons"] }
// 示例代码
use paris_log::{info, error, warn, success};
use log::LevelFilter;
use simple_logger::SimpleLogger;
fn main() {
// 初始化日志实现
SimpleLogger::new()
.with_level(LevelFilter::Info)
.init()
.unwrap();
// 使用带颜色格式的日志
info!("This is <blue>a colored</> info message!");
// 使用图标功能
warn!("This is a warning message with icon");
// 错误日志
error!("This is an <red>error</> message");
// 成功日志(需要icons功能)
success!("Operation completed successfully!");
// 使用格式化参数
let count = 5;
info!("Processing {} items", count);
}
这个示例展示了:
- 如何初始化日志实现
- 使用不同日志级别
- 使用颜色格式化
- 使用图标功能
- 结合常规格式化参数
要运行这个示例,还需要在Cargo.toml中添加:
[dependencies]
simple_logger = "2.0" # 或其他日志实现
完整示例demo
// Cargo.toml 需要包含:
// [dependencies]
// paris-log = { version = "1", features = ["icons"] }
// simple_logger = "2.0"
use paris_log::{info, error, warn, success};
use log::LevelFilter;
use simple_logger::SimpleLogger;
fn main() {
// 初始化日志实现,设置日志级别为Info
SimpleLogger::new()
.with_level(LevelFilter::Info)
.init()
.unwrap();
// 演示不同日志级别的消息
info!("<blue>欢迎</>使用paris-log日志系统");
// 带格式化参数的消息
let user = "张三";
info!("用户 <green>{}</> 已登录", user);
// 警告消息
warn!("<yellow>警告</>: 磁盘空间即将用尽");
// 错误消息
error!("<red>错误</>: 无法连接到数据库");
// 成功消息(需要icons功能)
success!("数据保存成功!");
// 复杂格式的消息
let items = vec!["苹果", "香蕉", "橙子"];
info!("购物车中有 <magenta>{}</> 件商品: <cyan>{:?}</>", items.len(), items);
// 带图标的debug消息(不会显示,因为日志级别设置为Info)
paris_log::debug!("这条消息不会显示");
}
这个完整示例演示了:
- 如何初始化paris-log
- 使用不同日志级别(info, warn, error, success)
- 结合颜色格式化和常规格式化
- 使用格式化参数
- 日志级别过滤功能
- 图标功能的使用
输出结果会根据是否启用icons功能而有所不同,但通常包含彩色文本和相应的图标(如果启用icons功能)。
Rust日志记录库paris-log的使用指南
paris-log是一个简洁高效的Rust日志记录库,提供了直观的API和美观的输出格式,特别适合需要彩色日志输出的CLI应用程序。
主要特性
- 简洁的API设计
- 内置彩色输出
- 支持不同日志级别
- 轻量级,无额外依赖
安装
在Cargo.toml中添加依赖:
[dependencies]
paris-log = "1.0"
基本使用方法
use paris_log::{info, warn, error, success, Logger};
fn main() {
// 最简单的日志输出
info!("这是一条普通信息日志");
warn!("这是一条警告日志");
error!("这是一条错误日志");
success!("这是一条成功日志");
// 带格式化的日志
let count = 5;
info!("处理了 {} 个项目", count);
// 使用Logger实例
let mut logger = Logger::new();
logger.info("使用Logger实例输出信息");
logger.warn("这是一条警告");
logger.error("出错了!");
logger.success("操作成功完成");
// 添加自定义图标
logger.info("</> 带图标的日志消息");
}
高级功能
日志级别控制
use paris_log::{Logger, Level};
fn main() {
let mut logger = Logger::new();
// 设置日志级别
logger.level(Level::WARN);
// 只有WARN及以上级别的日志会显示
logger.info("这条不会显示"); // 被过滤
logger.warn("这条会显示");
}
组合消息
use paris_log::Logger;
fn main() {
let mut logger = Logger::new();
logger
.info("开始处理")
.indent(1) // 缩进1级
.info("处理步骤1")
.info("处理步骤2")
.indent(2) // 再缩进2级(总共3级)
.warn("需要注意的事项")
.indent(-3) // 回到顶级
.success("处理完成");
}
自定义格式
use paris_log::{Logger, styles};
fn main() {
let mut logger = Logger::new();
// 自定义格式
logger.custom(
"<blue>[自定义]</>", // 前缀
"这是一条自定义格式的消息", // 消息
Some(styles::red) // 颜色样式
);
}
输出示例
paris-log的典型输出如下:
ℹ️ 这是一条普通信息日志
⚠️ 这是一条警告日志
❌ 这是一条错误日志
✓ 这是一条成功日志
ℹ️ 处理了 5 个项目
</> 带图标的日志消息
性能建议
paris-log设计时就考虑了性能,但以下建议可以进一步优化:
- 在生产环境中考虑适当提高日志级别,减少不必要的日志输出
- 对于频繁调用的日志点,可以使用
log!
宏进行条件编译
paris-log特别适合开发工具、CLI应用和需要直观日志显示的场合,它的简洁API和美观输出可以显著提升开发体验。
完整示例demo
use paris_log::{info, warn, error, success, Logger, Level, styles};
fn main() {
// 基本日志输出示例
println!("=== 基本日志输出 ===");
info!("应用程序启动");
warn!("磁盘空间不足警告");
error!("文件读取失败");
success!("数据保存成功");
// 带变量的日志
let user_count = 42;
info!("当前在线用户数: {}", user_count);
// Logger实例使用示例
println!("\n=== Logger实例使用 ===");
let mut logger = Logger::new();
logger.info("初始化日志系统");
logger.warn("检测到配置问题");
logger.error("数据库连接失败");
logger.success("服务启动完成");
// 日志级别控制示例
println!("\n=== 日志级别控制 ===");
let mut level_logger = Logger::new();
level_logger.level(Level::WARN);
level_logger.info("这条INFO日志不会显示"); // 被过滤
level_logger.warn("这条WARN日志会显示");
level_logger.error("这条ERROR日志会显示");
// 组合消息示例
println!("\n=== 组合消息 ===");
let mut combo_logger = Logger::new();
combo_logger
.info("开始处理任务")
.indent(1)
.info("步骤1: 读取输入文件")
.info("步骤2: 处理数据")
.indent(1)
.warn("数据校验警告: 发现空值")
.indent(-2)
.success("任务处理完成");
// 自定义格式示例
println!("\n=== 自定义格式 ===");
let mut custom_logger = Logger::new();
custom_logger.custom(
"<magenta>[系统]</>",
"这是一条自定义颜色的系统消息",
Some(styles::magenta)
);
custom_logger.custom(
"<green>[成功]</>",
"操作执行成功",
Some(styles::green)
);
}
运行上述完整示例后,您将看到类似以下的彩色输出:
=== 基本日志输出 ===
ℹ️ 应用程序启动
⚠️ 磁盘空间不足警告
❌ 文件读取失败
✓ 数据保存成功
ℹ️ 当前在线用户数: 42
=== Logger实例使用 ===
ℹ️ 初始化日志系统
⚠️ 检测到配置问题
❌ 数据库连接失败
✓ 服务启动完成
=== 日志级别控制 ===
⚠️ 这条WARN日志会显示
❌ 这条ERROR日志会显示
=== 组合消息 ===
ℹ️ 开始处理任务
ℹ️ 步骤1: 读取输入文件
ℹ️ 步骤2: 处理数据
⚠️ 数据校验警告: 发现空值
✓ 任务处理完成
=== 自定义格式 ===
[系统] 这是一条自定义颜色的系统消息
[成功] 操作执行成功