2012-04-23 13 views
0

私はBoost.Logライブラリを使用しています。私はnamed_scope属性を作成して、コードのどこにいるのかを記録しています。 (BOOST_LOG_NAMED_SCOPE("...")で手作業で指定します)特定のスコープのメッセージのみを選択するフィルタを作成することはできますか(set_filter)?Boost.Logで範囲を絞り込む

答えて

2

アンドレイの最新&最大ログdocを参照してください:

スコープ・スタックは、スレッド固有のグローバルストレージ内部 として実装されています。このスタックをログパイプラインにフックすることを可能にするnamed_scope属性があります。この属性はスコープスタック のインスタンスであるネストされた型named_scope :: scope_stackの値 を生成します。属性は次のように登録できます。

logging :: core :: get() - > add_global_attribute( "Scope"、 attrs :: named_scope());

その後、あなたはあなたがするために、以下のように使用することができます)(SET_FILTERために通過するフィルタラムダまたはカスタムフィルタへの関心の唯一のタグを(ラッチするためにあなたのフロントエンドシンクフィルタを設定する必要がありますuはMBCSで動作すると仮定エキススコープ名を、)

typedef attrs::basic_named_scope<char>::value_type scope_stack;  
logging::value_extractor<char, scope_stack> S("Scope"); 
scope_stack s = *S(rec); 
if (s.empty() == false) 
{ 
    const attrs::basic_named_scope_entry<char>& e = s.back(); 
    // Filter by e.scope_name 
    ... 
} 

私はそれがあなたのために働くことを願っています:)

+0

ポインタと説明してくれてありがとう。 Boostから離れました。去年はログインしてください。それがBoostに含まれるまでは、維持するのは難しいです。しかし、これは私が戻ってきた時に非常に便利です。 – foxcub

関連する問題