2016-02-07 62 views
0

我正在尝试创建一个类似log4c的Boost记录器。 装饰了我的日志记录的东西像“文件”,“功能”,“行”等 还创建了一个自定义过滤器,它可以获取设置的所有属性通过Boost.Log中的属性值筛选器(V2)

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; 

其中, “行”, “文件”, “功能” 是从LINEFILE功能 '明显的' 价值宏(我不知道如何逃避双下划线,对不起)。令人惊讶的是,logrecord只包含像“Severity”,“LineID”,“TimeStamp”等的“全局”记录成员,但不是我在记录时创建的自定义属性 (例如Line,File,Function等)。显然,它们是用我自定义的格式化程序写入日志目标的,没有任何问题。

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

有人可以指导我什么,我失踪了? 谢谢,

+0

该死的。我完全错过了www.boost.org/doc/libs/1_58_0/libs/log/doc/html/log/rationale/why_attribute_manips_dont_affect_filters.html – harsszegi

回答

0

好的。所以在执行过滤器后会附加常规属性(我发现这很奇怪,但情况就是如此)。所以我需要使用范围内的属性