#log-level #logging #multi-threading #traceback #channel #supporting

面包屑导航

一个美丽、小巧的跟踪和日志库,支持 #![no_std] Rust

6 个版本

0.1.5 2023 年 11 月 20 日
0.1.4 2023 年 11 月 12 日
0.1.3 2023 年 10 月 30 日

#238调试

Download history 15/week @ 2024-03-30 6/week @ 2024-04-06

每月下载量 54 次

Apache-2.0

21KB
285

breadcrumbs

Breadcrumbs 是一个美丽的、小巧的 Rust 跟踪和日志库,它提供了与 #![no_std]、多线程和并发无缝集成的功能。

特性

  • 格式化优美的日志跟踪(支持 DisplayDebug
  • 动态日志级别
  • 动态日志通道
  • #![no_std] 无缝集成
  • 支持无特殊语法的多线程和并发日志
  • 易于使用的宏
  • 支持监听器接收新日志通知

使用方法

将以下内容添加到你的 Cargo.toml

[dependencies]
breadcrumbs = "0.1.5"

然后在你的 main.rslib.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");

TracebackLog 对象优雅地实现了 DisplayDebug

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