我正在使用Boost.Log库。我创建了一个named_scope
属性来跟踪我在代码中的位置。(我用 手动指定它BOOST_LOG_NAMED_SCOPE("...")
。)是否可以创建一个过滤器(使用set_filter
)只选择来自特定范围的消息?
问问题
997 次
1 回答
2
请参考 Andrey 最新和最棒的日志记录文档:
范围堆栈在内部实现为特定于线程的全局存储。有一个 named_scope 属性,允许将此堆栈挂钩到日志记录管道。此属性生成嵌套类型 named_scope::scope_stack 的值,它是范围堆栈的实例。该属性可以通过以下方式注册:
logging::core::get()->add_global_attribute("Scope", 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
...
}
我希望它对你有用:)
于 2013-03-11T22:37:36.363 回答