在 Boost.Log(V2) 中筛选属性值

filter for attribute values in Boost.Log(V2)

本文关键字:筛选 属性 V2 Boost Log      更新时间:2023-10-16

我正在尝试创建一个类似于log4c的Boost记录器。用"文件"、"功能"、"行"等内容装饰了我的日志记录。还创建了一个自定义过滤器,该过滤器通过以下方式获取所有属性集

bool Filter(const boost::log::attribute_value_set& set)
{
  for (boost::log::attribute_value_set::const_iterator it=set.begin(); it != set.end(); ++it)
    {
      std::cout << "Name " << it->first << std::endl;
    }
[...]
}

日志的基础是严重性过滤器是通过

BOOST_LOG_GLOBAL_LOGGER_INIT( my_logger,boost::log::sources::severity_logger_mt < SeverityLevel > )

其中严重性级别是客户枚举。

我正在创建日志记录,例如:

BOOST_LOG_SEV(my_logger::get(),level) << boost::log::add_value("Mask", mask) << boost::log::add_value("Line", line) << boost::log::add_value("File", File) << boost::log::add_value("Function", Function) << l_line;

其中"line","File","Function"是LINE,FILEFUNCTION宏中的"明显"值(meh我不知道如何转义双下划线,抱歉(。

令我惊讶的是,日志记录仅包含"全局"记录成员,如"严重性","LineID","时间戳"等,但不包含我的自定义属性在日志时创建(例如行、文件、函数等(。显然,它们是使用我的自定义格式化程序写入日志目标的,没有任何问题。

我显然错过了一些非常简单的东西,请注意我是谷歌搜索了半天没有任何运气。

有人可以指导我到底错过了什么吗?谢谢

好的。因此,在执行过滤器后附加常规属性(我觉得这很奇怪,但情况就是这样(。所以我需要使用作用域属性