可以,但不是直接的。
两部分:
调试
默认情况下,调试消息是隐藏的,您可以通过将环境变量 G_MESSAGES_DEBUG 设置为 all 来显示它们
其他
要隐藏其他消息,您可以使用g_log_set_handler定义自己的日志函数,该函数不会显示消息
这个小代码会做你想做的事:
#include <glib.h>
/* a log function that will eat the message without displaying it */
void log_quiet(const gchar* domain, GLogLevelFlags level, const gchar *message, gpointer user_data)
{
// nop
}
int main(int argc, char *argv[])
{
/* message filter */
int filter = 0;
/* decode argument given here, it's the first argument given */
if (argc > 1)
{
if (0 == strcmp(argv[1], "debug")) {
filter = G_LOG_LEVEL_DEBUG;
} else if (0 == strcmp(argv[1], "debug")) {
filter = G_LOG_LEVEL_DEBUG;
} else if (0 == strcmp(argv[1], "message")) {
filter = G_LOG_LEVEL_MESSAGE;
} else if (0 == strcmp(argv[1], "warning")) {
filter = G_LOG_LEVEL_WARNING;
} else if (0 == strcmp(argv[1], "critical")) {
filter = G_LOG_LEVEL_CRITICAL;
} else if (0 == strcmp(argv[1], "error")) {
filter = G_LOG_LEVEL_ERROR;
}
}
/* set the message handler*/
switch (filter) {
case G_LOG_LEVEL_DEBUG:
/* in case of debug, we must make it visible */
setenv("G_MESSAGES_DEBUG", "all", 1);
break;
/* other case, hide messages progressively */
case G_LOG_LEVEL_ERROR:
g_log_set_handler(NULL, G_LOG_LEVEL_CRITICAL, log_quiet, NULL);
case G_LOG_LEVEL_CRITICAL:
g_log_set_handler(NULL, G_LOG_LEVEL_WARNING, log_quiet, NULL);
case G_LOG_LEVEL_WARNING:
g_log_set_handler(NULL, G_LOG_LEVEL_MESSAGE, log_quiet, NULL);
case G_LOG_LEVEL_MESSAGE:
g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, log_quiet, NULL);
}
/* test */
g_debug("Hello from g_debug");
g_message("Hello from g_message");
g_warning("Hello from g_warning");
g_critical("Hello from g_critical");
g_error("Hello from g_error");
return 0;
}