我正在使用自定义格式化函数,并试图弄清楚如何格式化范围属性。我发现的 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
}
最佳答案
当您检索该属性时,它会为您提供一个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/