代码之家  ›  专栏  ›  技术社区  ›  bdonlan

glib中的默认日志处理程序是否可以传递多个日志级别?

  •  0
  • bdonlan  · 技术社区  · 15 年前

    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保证定义的吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   ASk    15 年前

    是的,是的。 视为 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 .因为它们是位标志,所以可以使用二进制或运算符将多个通道组合成单个处理程序。