glib GLogLevelFlags枚举定义为:
typedef enum
{
/* log flags */
G_LOG_FLAG_RECURSION = 1 << 0,
G_LOG_FLAG_FATAL = 1 << 1,
/* GLib log levels */
G_LOG_LEVEL_ERROR = 1 << 2, /* always fatal */
G_LOG_LEVEL_CRITICAL = 1 << 3,
G_LOG_LEVEL_WARNING = 1 << 4,
G_LOG_LEVEL_MESSAGE = 1 << 5,
G_LOG_LEVEL_INFO = 1 << 6,
G_LOG_LEVEL_DEBUG = 1 << 7,
G_LOG_LEVEL_MASK = ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL)
} GLogLevelFlags;
default handler是否可以接收(例如)(G_LOG_LEVEL_ERROR | G_LOG_LEVEL_DEBUG)作为其日志级别?这是根据glib的API guarentees明确定义的吗?
答案 0 :(得分:2)
是的 - 确实如此。
看作G_LOG_LEVEL_MASK
被定义为一个按位掩码,所有位都设置为0和1,
g_log_set_handler ("GLib", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL
| G_LOG_FLAG_RECURSION, my_log_handler, NULL);
用作为来自GLib的所有消息添加日志处理程序的示例,组合日志级别很好。
另外,请考虑g_log_set_handler
的以下引用:
设置域的日志处理程序和一组日志级别
最后,请参阅this tutorial,其中包括:
GLogLevelFlags参数是位标志的枚举,用于定义日志消息的字符和特定通道。您最有可能使用日志处理程序的三个是
G_LOG_LEVEL_MESSAGE
,G_LOG_LEVEL_WARNING
和G_LOG_LEVEL_ERROR
。由于它们是位标志,因此您可以使用二进制OR运算符将多个通道组合到单个处理程序中。