Я пытаюсь создать фильтр по настраиваемому уровню серьезности.Я написал следующий класс фильтра:
class FilterBySeverity
{
public:
FilterBySeverity(boost::log::trivial::severity_level logLevel) :
m_logLevel(logLevel),
m_severityAttributeName("Severity")
{
}
bool operator()(const boost::log::attribute_value_set& attrs) const noexcept
{
auto it = attrs.find(m_severityAttributeName);
if (it == attrs.end()) return true;
return it->second.extract<int>() >= m_logLevel;
}
private:
const boost::log::trivial::severity_level m_logLevel;
const boost::log::attribute_name m_severityAttributeName;
};
и затем я инициализирую журнал следующим образом:
auto sink = boost::log::add_console_log(std::cout);
sink->set_filter(FilterBySeverity(logOptions.m_severity));
sink->locked_backend()->auto_flush(true);
Затем я делаю тестовый вывод:
BOOST_LOG_TRIVIAL(info) << "Logging started.";
Но я не вижу своего сообщения.Но когда я закомментирую вызов set_filter (), появится сообщение.Значение logOptions.m_severity равно 0, т.е. все сообщения должны быть разрешены.Попытался установить точку останова в операторе () и проверить, что происходит - похоже, работает правильно.Что я делаю не так?