过滤Boost.Log(V2)中的属性值

时间:2016-02-07 16:12:47

标签: c++ logging boost

我正在尝试创建一个类似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 > )

其中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 FILE FUNCTION 宏的“明显”值(我不知道如何逃避双下划线,对不起)。

令我惊讶的是,logrecord只包含“全局”记录成员,如“Severity”,“LineID”,“TimeStamp”等,但不是我的自定义属性 在日志时创建(例如行,文件,函数等)。显然,使用我的自定义格式化程序将它们写入日志目的地没有任何问题。

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

有人可以指导我,我错过了什么? 谢谢,

1 个答案:

答案 0 :(得分:0)

确定。因此在执行过滤器后会附加常规属性(我觉得很奇怪,但情况确实如此)。所以我需要使用范围属性