6 个版本
0.1.5 | 2023 年 11 月 20 日 |
---|---|
0.1.4 | 2023 年 11 月 12 日 |
0.1.3 | 2023 年 10 月 30 日 |
#238 在 调试
每月下载量 54 次
21KB
285 行
breadcrumbs
Breadcrumbs 是一个美丽的、小巧的 Rust 跟踪和日志库,它提供了与 #![no_std]
、多线程和并发无缝集成的功能。
特性
- 格式化优美的日志跟踪(支持
Display
和Debug
) - 动态日志级别
- 动态日志通道
- 与
#![no_std]
无缝集成 - 支持无特殊语法的多线程和并发日志
- 易于使用的宏
- 支持监听器接收新日志通知
使用方法
将以下内容添加到你的 Cargo.toml
[dependencies]
breadcrumbs = "0.1.5"
然后在你的 main.rs
或 lib.rs
中初始化 breadcrumbs
一次
use breadcrumbs::init;
init!();
你可以通过实现 LogListener
特性轻松设置自定义日志监听器
use breadcrumbs::{init, LogListener, Log, LogLevel};
struct MyLogListener;
impl LogListener for MyLogListener {
fn on_log(&mut self, log: Log) {
if log.level.is_at_least(LogLevel::Warn) {
println!("{}", log);
} else {
// 💡 New in 0.1.5 - Remove unnecessary logs to save memory
// Useful in embedded usecases
log.remove();
}
}
}
init!(MyLogListener);
然后,只需在任何地方使用 log!
宏或其变体来记录消息
use breadcrumbs::{log, log_level, log_channel, LogLevel};
// A basic log message
log!("Hello, world!");
// A log message with a custom level
log_level!(LogLevel::Info, "Test log message");
// A log message with a custom channel
log_channel!("test_channel", "Test log message");
// A log message with a custom channel and level
log!(LogLevel::Info, "test_channel", "Test log message");
使用 traceback!
宏或其变体从任何地方访问日志消息的跟踪
use breadcrumbs::{traceback, traceback_channel, traceback_level, LogLevel};
// A basic traceback, fetching all logged messages
let t = traceback!();
// A traceback with a custom channel, fetching messages in this channel
let t = traceback_channel!("my-channel");
// A traceback with a custom level, fetching messages of this level or higher
let traceback = traceback_level!(LogLevel::Warn);
// A traceback with a custom channel and level, fetching messages in this channel of this level or higher
let traceback = traceback!(LogLevel::Warn, "test_channel");
Traceback
和 Log
对象优雅地实现了 Display
和 Debug
use breadcrumbs::traceback;
let t = traceback!();
println!("{}", t);
println!("{:?}", t);
示例
use breadcrumbs::{init, log, log_level, log_channel, traceback, LogLevel, LogListener, Log};
struct MyLogListner;
impl LogListener for MyLogListner {
fn on_log(&mut self, log: Log) {
if log.level.is_at_least(LogLevel::Warn) {
println!("{}", log);
}
}
}
fn main() {
init!(MyLogListner);
log!("Hello, world!");
log_level!(LogLevel::Info, "Test log message");
log_channel!("test_channel", "Test log message");
log!(LogLevel::Warn, "test_channel", "Test log message");
let t = traceback!();
println!("Fatal Error! Traceback:\n{}", t);
}
依赖项
~155KB