我正在使用自定义格式功能,并试图弄清楚如何格式化范围属性。我在boost文档中找到的示例是针对lambda表达式格式化程序的,我不知道该如何在格式化程序函数中使用。现在,我已经成功使用了时间戳等属性,但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
}

最佳答案

检索属性时,它会给您一个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;
}

关于c++ - 在自定义 boost 日志格式功能中格式化范围属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23366392/

10-11 22:42
查看更多