问题描述
boost::log::core::get()->set_filter(boost::phoenix::bind(&LoggerContext::checkIfShouldBeLogged,this,<WHICH_ARGUMENT_DO_I_PASS?>));
过滤函数的签名在哪里
bool LoggerContext::checkIfShouldBeLogged(const boost::log::attribute_value_set &attributeValueSet);
正如文档中所述。
如果我将该函数设为静态,我可以简单地省略参数并像这样设置过滤器:
boost::log::core::get()->set_filter(&LoggerContext::checkIfShouldBeLogged);
这个参数似乎被神奇地传递了。
sink->set_formatter(&LoggerContext::fileFormatter);
签名
void LoggerContext::fileFormatter(boost::log::record_view const &rec,boost::log::formatting_ostream &strm);
但在使用 boost::phoenix::bind
时,我再次不知道从哪里获取参数以传递它们。
解决方法
@Jorge Bellon:我刚刚读了你的评论,它给了我一个很好的提示,说明这是如何工作的。
解决方案是使用 boost::phoenix
占位符。这适用于格式化程序和过滤器:
boost::log::core::get()->set_filter(boost::phoenix::bind(&LoggerContext::checkIfShouldBeLogged,this,boost::phoenix::placeholders::arg1));
sink->set_formatter(boost::phoenix::bind(&LoggerContext::fileFormatter,boost::phoenix::placeholders::arg1,boost::phoenix::placeholders::arg2));
谢谢你的提示!