0

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;

默认处理程序是否可以接收例如 (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_DEBUG) 作为其日志级别?根据 glib 的 API 保证,这是明确定义的吗?

4

1 回答 1

2

是的。Seeing asG_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

设置域的日志处理程序和一组日志级别

最后,请参阅本教程,其中指出:

GLogLevelFlags 参数是位标志的枚举,用于定义日志消息的字符和特定通道。您最有可能与日志处理程序一起使用的三个是G_LOG_LEVEL_MESSAGEG_LOG_LEVEL_WARNINGG_LOG_LEVEL_ERROR。由于它们是位标志,因此您可以使用二元 OR 运算符将多个通道组合到单个处理程序中。

于 2009-05-21T04:24:49.333 回答