#logger #log #macro #logging #log-level #no-alloc

no-std goolog

此库提供了兼容 no_std 的 goolog 日志记录器以及一些宏来简化日志打印

12 个版本 (破坏性更新)

0.10.0 2024年2月20日
0.9.1 2023年8月10日
0.8.1 2023年7月5日

#21 in #log-level


用于 goohttp

MIT 许可证

19KB
239

goolog

此库提供了兼容 no_std 的 goolog 日志记录器以及一些宏来简化日志打印。

嵌入式/无 std 环境中的使用

由于此日志记录器是在无 std 环境中实现的,因此它将默认与所有嵌入式系统一起工作。

#![no_std]

use goolog::*;

fn main() {
    // First, we initialize the logger.
    init_logger(
        None,
        None,
        // println callback
        &|_args| {
            // something printing our args to the console
        },
    );

    // Now we define a callback, which gets called whenever anyone uses the fatal! macro.
    set_on_fatal(&|| {
        // some function to restart your embedded device
    });

    // Now you can start logging using either these library macros or the log crates ones.
}

特性

std

此功能将
1. 使用标准库实现 println 回调
2. 实现致命错误回调
3. 使用 chrono 启用时间戳

示例

以下所有示例都假设您已激活 std 功能。

use goolog::*;

fn main() {
    // Initializing the logger
    init_logger(None, None);

    // See the macros module for all possible log types.
    info!("Main"; "Initialized the goolog logger.");
}

上面的代码将产生以下输出

# The timestamp (first two blocks) will only be shown when
# the `std` feature is active.

29.05.2023 | 14:34:33 | Main             | INFO  | Initialized the goolog logger.

但在现实中,日志消息将以这种颜色格式化

GREY | GREY | WHITE | * | WHITE

*:
    DEBUG -> Blue
    ERROR -> Red
    INFO  -> Green
    TRACE -> White
    WARN  -> Yellow

生活质量

使用这些库宏将日志行打印到控制台时,有两种指定目标的方式

宏指定

这始终是可能的。即使在以下描述的第二种方法结合使用时也是如此。

use goolog::*;

fn main() {
    init_logger(None, None);

    info!("Main"; "Initialized the goolog logger.");
}

常量指定

对于此方法,您只需要指定一次目标

use goolog::*;

set_target!("Main");

fn main() {
    init_logger(None, None);

    info!("Initialized the goolog logger.");

    // You can still specify a different target
    // just for that log line.
    info!("Foo"; "Initialized the goolog logger.");
}

自定义

目前,有两种方式可以自定义您的 goolog 日志记录器

更改日志级别

默认情况下,记录器将在 info 级别记录。要更改此,只需提供一个新的日志级别即可。

use goolog::*;
use goolog::log::Level;

fn main() {
    // Initializing the logger with the log level set to trace
    init_logger(Some(Level::Trace), None);

    // See the macros module for all possible log types.
    // This will only be logged if the log level is set to
    // trace.
    trace!("Main"; "Initialized the goolog logger.");
}

更改调用者名称的长度

默认目标长度为 16 个字符。任何给定名称超过此长度将直接截断。但是,有两种方法可以自定义此行为

1. 更改限制

use goolog::*;

fn main() {
    // Initialize the logger with a new target length of 32
    // characters.
    init_logger(None, Some(32));

    // ...

    // You can also change the target length at runtime.
    set_target_length(8)
}

2. 移除限制

要执行此操作,请将 target_length 设置为 0,方法之一如上所示。

但在您这样做之前,您可能需要考虑一些缺点:如果没有给出限制,记录器无法知道为名称留多少空间。因此,每条日志行都会“弯曲”到名称周围,看起来可能如下所示

29.05.2023 | 14:34:33 | Main | INFO  | Starting some very important things...
29.05.2023 | 14:34:33 | MySuperAwesomeClient | INFO  | Starting...

依赖项

~180–510KB