#logging #glib #log-level #message #integrate

glib_logger

一个与 Glib 消息日志集成的日志记录器

1 个不稳定版本

0.1.0 2020 年 2 月 10 日

#16 in #integrate

MIT 许可证

14KB
185

一个简单的日志记录器,它集成了 glib 消息日志 机制。当需要将一段 Rust 代码集成到已使用 glib/gio 栈的更大应用程序中时,这个日志记录器非常有用。

示例

use std::env;

use log;

fn main() {
    env::set_var("G_MESSAGES_DEBUG", "all");

    glib_logger::init(&glib_logger::SIMPLE);
    log::set_max_level(log::LevelFilter::Debug);

    log::info!("info message: {}", 2);
    log::warn!("warning message: {}", "foobar");
    log::debug!("Hello, world!");
}

等效的 Vala 代码

public void main() {
    Environment.set_variable ("G_MESSAGES_DEBUG", "all", false);

    info("info message: %d", 2);
    warning("warning message: %s", "foobar");
    debug("Hello, world!");
}

运行

$ ./glib_logger_test
** INFO: 20:18:34.074: src/main.rs:12: info message: 2

** (process:39403): WARNING **: 20:18:34.076: src/main.rs:13: warning message: foobar
** (process:39403): DEBUG: 20:18:34.076: src/main.rs:15: Hello, world!

详细信息

由于不同的日志级别含义之间略有差异,该包采取了一些灵活性。特别是日志级别映射如下

  • Level::Trace, Level::Debug => G_LOG_LEVEL_DEBUG
  • Level::Error => G_LOG_LEVEL_CRITICAL
  • Level::Info => G_LOG_LEVEL_INFO
  • Level::Warn => G_LOG_LEVEL_WARNING

在 C 中的 g_error() 宏产生的 G_LOG_LEVEL_ERROR 没有映射到 log::Level 枚举值。原因是 g_error() 是致命的,而 log::error!() 则不是。

格式化完全在 Rust 中完成。然而,基于级别的日志过滤是在 Glib 中完成的。建议设置环境变量 G_MESSAGES_DEBUG=all

使用 Glib,可以通过在 C 代码中直接使用 #define G_LOG_DOMAIN "my-domain" 来为每个文件设置一个域。在使用 glib_logger 时,此功能不可用,所有日志都带有 NULL 域。

依赖关系

~455KB