c-g_log_structed未显示在系统日志中



我正试图使用g_log_structured将消息从GLib输出到Linux日志,但消息没有出现。

#define G_LOG_USE_STRUCTURED
#include <glib-2.0/glib.h>
#include <stdio.h>
/* Compile command
gcc mysource.c -lglib-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
*/
int main(int argc, char *argv[]) {
g_log_structured (G_LOG_DOMAIN,
G_LOG_LEVEL_INFO,
"CODE_FILE", "mysource.c",
"CODE_LINE", 312,
"MESSSAGE_ID", "123456",
"MESSAGE", "You have %d eggs", 12 + 2);
return 0;
}

运行程序后,我用journalctl扫描日志,但找不到我的消息。我在搞什么?

"结构化测井";以及";登录日志";是两个相似但不同的概念。

目前,您可以对几个输出流进行结构化日志记录:例如,一个文件(它写入CSV(,或者stdout(您可以在其中为某些字段着色(。这实际上是通过定义G_LOG_USE_STRUCTURED和使用g_log_structured()来实现的

另一方面,当应用程序记录结构化消息时,您需要某种回调来处理应该发生的事情。这就是我们所说的GLogWriterFunc。可以通过发出g_log_set_writer_func()来设置此回调。GLib默认情况下提供了一些这样的日志编写器回调,因为它们非常常见:g_log_writer_standard_streams,它写入stdout/stderr,g_log_writer_journald,它写入journed。

换句话说,如果你想无条件地写入日志,你需要在记录任何消息之前调用以下命令:

int main(int argc, char *argv[]) {
/* You can of course write your own GLogWriterFunc and use that here */
g_log_set_writer_func (g_log_writer_journald, NULL, NULL);
/* The following log message will go to journald */
g_log_structured (G_LOG_DOMAIN,
G_LOG_LEVEL_INFO,
"CODE_FILE", "mysource.c",
"CODE_LINE", 312,
"MESSSAGE_ID", "123456",
"MESSAGE", "You have %d eggs", 12 + 2);
return 0;
}

最新更新