1 个不稳定版本
0.1.0 | 2020 年 2 月 10 日 |
---|
#16 in #integrate
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_DEBUGLevel::Error
=> G_LOG_LEVEL_CRITICALLevel::Info
=> G_LOG_LEVEL_INFOLevel::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