在Boost.Log中按范围过滤

时间:2012-04-23 19:59:32

标签: c++ boost boost-log

我正在使用Boost.Log库。我创建了一个named_scope属性,可以跟踪我在代码中的位置。 (我用BOOST_LOG_NAMED_SCOPE("...")手动指定。)是否可以创建一个过滤器(使用set_filter),只选择来自特定范围的消息?

1 个答案:

答案 0 :(得分:2)

请参阅安德烈的最新版本最大的记录doc

  

作用域堆栈实现为特定于线程的全局存储   内部。有一个允许挂钩的named_scope属性   这个堆栈进入日志管道。此属性生成值   嵌套类型named_scope :: scope_stack是的实例   范围堆栈。可以通过以下方式注册该属性:

     

测井::芯::得到() - > add_global_attribute( “范围”,   ATTRS :: named_scope());

然后,您应该配置前端接收器过滤器以仅锁定您感兴趣的标签(在过滤器lambda中或您传递给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
   ...
}

我希望它对你有用:)