0

glibGLogLevelFlags列挙型は次のように定義されます。

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

はい、そうです。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_MESSAGEおよびG_LOG_LEVEL_WARNINGですG_LOG_LEVEL_ERROR。これらはビットフラグであるため、バイナリOR演算子を使用して、複数のチャネルを1つのハンドラーに結合できます。

于 2009-05-21T04:24:49.333 に答える