我有一个用C语言编写的库和glib / gobject.它通过g_debug()调用生成大量调试信息.此信息对于故障排除非常有用,但是当实际应用程序包含库时,我不希望它显示.所以,基本上我需要一种方法来控制/过滤调试信息量,我无法弄清楚它应该如何与glib一起使用.有人能指出我正确的方向吗?
解决方法
您可以尝试按照GLib开发人员站点中的说明设置G_DEBUG环境变量.请参阅
http://developer.gnome.org/glib/2.28/glib-running.html中的运行和调试GLib应用程序下的环境变量部分.
编辑:更新以在代码中设置记录器.
您可以使用g_log_set_handler(http://developer.gnome.org/glib/2.29/glib-Message-Logging.html#g-log-set-handler)在代码中执行此操作.最初,您可以将日志处理程序设置为虚拟函数,该函数显示nothings&然后,您可以根据为设置适当的日志级别传递的参数将日志处理程序设置为g_log_default_handler.要将日志级别设置为高于设置级别,您需要根据需要操作GLogLevelFlags值.
希望下面的代码示例将提供一些指示
#include <glib.h> #include <stdio.h> #include <string.h> #define G_LOG_DOMAIN ((gchar*) 0) static void _dummy(const gchar *log_domain,GLogLevelFlags log_level,const gchar *message,gpointer user_data ) { /* Dummy does nothing */ return ; } int main(int argc,char **argv) { /* Set dummy for all levels */ g_log_set_handler(G_LOG_DOMAIN,G_LOG_LEVEL_MASK,_dummy,NULL); /* Set default handler based on argument for appropriate log level */ if ( argc > 1) { /* If -vv passed set to ONLY debug */ if(!strncmp("-vv",argv[1],3)) { g_log_set_handler(G_LOG_DOMAIN,G_LOG_LEVEL_DEBUG,g_log_default_handler,NULL); } /* If -v passed set to ONLY info */ else if(!strncmp("-v",2)) { g_log_set_handler(G_LOG_DOMAIN,G_LOG_LEVEL_INFO,NULL); } /* For everything else,set to back to default*/ else { g_log_set_handler(G_LOG_DOMAIN,NULL); } } else /* If no arguments then set to ONLY warning & critical levels */ { g_log_set_handler(G_LOG_DOMAIN,G_LOG_LEVEL_WARNING| G_LOG_LEVEL_CRITICAL,NULL); } g_warning("This is warning\n"); g_message("This is message\n"); g_debug("This is debug\n"); g_critical("This is critical\n"); g_log(NULL,"This is info\n"); return 0; }
希望这可以帮助!