2009-05-21 5 views
0

glibのGLogLevelFlags列挙型は次のように定義されています。|そのログレベルとして(G_LOG_LEVEL_DEBUG G_LOG_LEVEL_ERROR)glibのデフォルトのログハンドラが複数のログレベルを渡すことは可能ですか?

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は、例えば、受信することは可能ですか?これはglibのAPIの守秘義務に従って明確に定義されていますか?

答えて

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パラメータは、ログメッセージの文字と特定のチャネルを定義するビットフラグの列挙型です。ログハンドラで最もよく使用される3つはG_LOG_LEVEL_MESSAGE,G_LOG_LEVEL_WARNINGG_LOG_LEVEL_ERRORです。これらはビットフラグであるため、バイナリOR演算子を使用して、複数のチャネルを1つのハンドラに結合することができます。

+0

はい、ハンドラの設定については話していますが、特定のメッセージが複数のチャンネルに属するとは思われません。 – bdonlan

+0

メッセージは複数のチャンネルに属しません。ハンドラは、受け入れられるように設定されたチャネルの1つに属するメッセージを受け入れます。すなわちif(message.channel&handler.accepted_channels){// handle} – ASk

関連する問題