簡體   English   中英

如何添加成員 function 作為例如 Boost Log 過濾器?

[英]How do I add a member function as e.g. Boost Log filter?

我想通過以下方式添加成員 function 作為日志過濾器:

boost::log::core::get()->set_filter(boost::phoenix::bind(&LoggerContext::checkIfShouldBeLogged, this, <WHICH_ARGUMENT_DO_I_PASS?>));

其中過濾 function 的簽名是

bool LoggerContext::checkIfShouldBeLogged(const boost::log::attribute_value_set &attributeValueSet);

正如文檔中所述。

我不知道要從 function 傳遞哪個參數,我正在嘗試添加過濾器。

如果我制作 function static,我可以簡單地省略參數並像這樣設置過濾器:

boost::log::core::get()->set_filter(&LoggerContext::checkIfShouldBeLogged);

這個論點似乎神奇地通過了。

設置自定義格式化程序也是如此。 以下適用於 static function:

sink->set_formatter(&LoggerContext::fileFormatter);

與簽名

void LoggerContext::fileFormatter(boost::log::record_view const &rec, boost::log::formatting_ostream &strm);

但是當使用boost::phoenix::bind時,我再次不知道從哪里獲得 arguments 以便通過它們。

@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, this, boost::phoenix::placeholders::arg1, boost::phoenix::placeholders::arg2));

謝謝你的提示!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM