在我们的程序中,为了调试方便,很多地方调了g_debug,结果程序运行起来后,终端上的信息打印得眼花缭乱,不但影响性能,而且把真正有用的信息淹没掉了。
Glib既然提供了log级别,自然可以按log级别加以过滤。不过稍微有点麻烦,可以按下列方式实现:
static void dummy_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
{
return;
}
void set_log_level(const char* progname)
{
char* basename = strrchr(progname, '/');
char* log_level_env_name = NULL;
char* log_level_evn_value = NULL;
basename = basename != NULL ? basename+1 : (char*)progname;
log_level_env_name = g_strdup_printf("%s_LOG_LEVEL", basename);
log_level_evn_value = getenv(g_strup(log_level_env_name));
if(log_level_evn_value != NULL)
{
unsigned int i = 1
unsigned int max_log_level = atoi(log_level_evn_value);
unsigned int log_level = 0;
for(; i > max_log_level; i--)
{
log_level = 1 i;
g_log_set_handler(NULL, (GLogLevelFlags)log_level, dummy_log, NULL);
}
}
g_free(log_level_env_name);
return;
}
通过设置 ”可执行文件名(大写)_LOG_LEVEL”环境变量,可以过滤不同严重程度的LOG信息,其取值为1-7,值越大,打印的信息越多。