c++ - 在自定义 boost 日志格式函数中格式化范围属性

标签 c++ boost boost-log

我正在使用自定义格式化函数,并试图弄清楚如何格式化范围属性。我发现的 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/

相关文章:

由于堆栈溢出,迭代合并排序的 C++ 实现在输入大时崩溃

c++ - 指向用户定义对象的 C++ 指针是否可以线程安全读取?

c++ - boost filesystem::path 构造函数 std::length_error

c++ - Boost 测试库使用不同的 "parameters"运行套件两次

boost - 需要帮助从源代码为 MinGW 构建 Boost

c++ - libboost_log_setup.a 库的原因?

c++ - std::is_empty<T> 如何在 VS2015(或任何编译器)中实现?

c++ - OpenCV HOGDescriptor 返回值

c++ - 如何在自定义格式化函数中使用 boost::log::expressions::format_date_time?

c++ - 如何抑制由 Boost.Log 和 GCC 4.4 引起的 "warning: missing initializer"?