在自定义提升日志格式函数中格式化范围属性

时间:2014-04-29 13:41:26

标签: c++ boost boost-log

我正在使用自定义格式化功能,并试图弄清楚如何格式化范围属性。我发现的boost文档中的示例是针对lambda表达式格式化程序的,我不知道如何在格式化程序函数中使用它。现在我成功使用了timetamp这样的属性,但是scope属性让我感到厌烦。

BOOST_LOG_ATTRIBUTE_KEYWORD(scope, "Scope", attributes::named_scope_list)
BOOST_LOG_ATTRIBUTE_KEYWORD(timestamp, "TimeStamp", boost::posix_time::ptime)

void formatter(boost::log::record_view const& record, boost::log::formatting_ostream& stream) {
  stream << record[timestamp];
  // stream << record[scope].file_name or something like that
} 

1 个答案:

答案 0 :(得分:2)

当您检索该属性时,它会为您提供named_scope_list,顾名思义就是named_scope的列表。每个named_scope都是struct,其中包含范围(函数名称)的文件,行和名称。

因此,它可以像这样使用:

attributes::named_scope_list scopeList = record[scope].get();
for (attributes::named_scope_list::const_iterator iter = scopeList.begin(); iter != scopeList.end(); ++iter)
{
  stream << iter->line;
}