Boost.Log фильтры заранее; следовательно, make_trace_record()
не будет вызываться, если серьезность недостаточно высока.
Чтобы установить фильтр серьезности для простого регистратора, позвоните:
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= boost::log::trivial::...
);
Например, следующий пример выдает 1
, показывая, что expensive()
вызывается только один раз:
Live On Coliru
#include <iostream>
#include <boost/log/expressions.hpp>
#include <boost/log/trivial.hpp>
int count = 0;
int expensive()
{
return ++count;
}
int main()
{
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= boost::log::trivial::warning
);
BOOST_LOG_TRIVIAL(error) << expensive();
BOOST_LOG_TRIVIAL(info) << expensive();
std::cout << count << '\n';
return 0;
}
Печать:
[2018-05-21 14:33:47.327507] [0x00007eff37aa1740] [error] 1
1
Для тех, кому интересно, как это работает, посмотрите: Как работает «ленивая оценка» тривиальных регистраторов Boost Log?