0

Boost.Logライブラリを使用しています。named_scopeコード内のどこにいるかを追跡する属性を作成しました。(手動で指定します。)特定のスコープからのメッセージのみを選択BOOST_LOG_NAMED_SCOPE("...")するフィルターを(を使用して)作成することは可能ですか?set_filter

4

1 に答える 1

2

アンドレイの最新かつ最高のロギングドキュメントを参照してください:

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

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

次に、対象のタグのみをラッチするようにフロントエンドシンクフィルターを構成する必要があります(フィルターラムダまたはset_filter()に渡すカスタムフィルターでは、以下を使用してスコープ名を抽出できます。 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
   ...
}

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

于 2013-03-11T22:37:36.363 に答える