gpt4 book ai didi

c - glib/gmessages.h 中的日志处理程序

转载 作者:行者123 更新时间:2023-11-30 15:58:53 25 4
gpt4 key购买 nike

我正在尝试使用 glib/gmessages.h作为我的应用程序的日志系统。我的问题通过以下代码演示:

试验.c:

#include <glib/gmessages.h>
#include <stdio.h>

void my_handler(const gchar* log_domain, GLogLevelFlags log_level,
const gchar* message, gpointer user_data)
{
printf("My handler: %s", message);
}

int main()
{
g_log_set_handler (LOG_DOMAIN, G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL |
G_LOG_FLAG_RECURSION, my_handler, NULL);
g_log(LOG_DOMAIN, G_LOG_LEVEL_WARNING, "Hello 1\n");
g_log(LOG_DOMAIN, G_LOG_LEVEL_WARNING | G_LOG_FLAG_RECURSION, "Hello 2\n");
return (0);
}

编译时

gcc trial.c -DLOG_DOMAIN=\"MY_APP\" `pkg-config --cflags --libs glib-2.0`

输出是:

~> ./a.out
My handler: Hello 1
(process:25133): MY_APP-WARNING (recursed) **: Hello 2
Aborted

为什么我的处理程序没有处理对 g_log 的第二次调用?感谢您的帮助。

最佳答案

由于您在第二次调用中使用了错误的参数,因此发送了中止信号。

您必须在 G_LOG_LEVEL_WARNINGG_LOG_FLAG_RECURSION 之间进行选择以使用 g_log 进行日志记录。

我猜你可以打2个电话

g_log(LOG_DOMAIN, G_LOG_FLAG_RECURSION, "Hello 2\n");
g_log(LOG_DOMAIN, G_LOG_LEVEL_WARNING, "Hello 2\n");

但我不确定这是一个好的做法。

G_LOG_LEVEL_WARNING | G_LOG_FLAG_RECURSION 参数错误。

关于c - glib/gmessages.h 中的日志处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9393131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com