2

我正在使用自定义格式化功能,并试图弄清楚如何格式化范围属性。我发现的 boost 文档中的示例适用于 lambda 表达式格式化程序,我不知道如何在格式化程序函数中使用它们。现在我成功地使用了时间戳等属性,但是范围属性让我无法理解。

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
} 
4

1 回答 1

2

当您检索该属性时,它会为您提供一个named_scope_list,顾名思义,它是一个named_scopes 列表。每个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;
}
于 2014-04-29T13:52:35.873 回答