Это не работает. Вы должны предоставить функцию фильтра для увеличения :: войти :: тривиальным согласно документации:
http://www.boost.org/doc/libs/1_61_0/libs/log/doc/html/log/tutorial/trivial_filtering.html
void init()
{
logging::core::get()->set_filter
(
// here they've used a constant but you could use a global or
// a function
logging::trivial::severity >= logging::trivial::info
);
}
int main(int, char*[])
{
init();
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
return 0;
}
Объект, передаваемый logging::core::set_filter
имеет тип boost::log::filter
Вы могли бы так же легко написать:
auto filt = logging::filter(logging::trivial::severity >= logging::trivial::info);
logging::core::get()->set_filter(filt);
filt
представляет собой легкий функциональный объект, чья работа состоит в том, чтобы проверить атрибуты, отправленные ему, и возвращать, будут ли все тесты против этих атрибутов возвращаться true
. В этом случае существует только один тест - logging::trivial::severity >= logging::trivial::info
.
Задача регистратора - создать набор атрибутов и передать его boost::log::core
, когда он хочет что-то испустить.
Долгий и короткий, что вы должны отслеживать уровень ведения журнала в своей переменной. Вот один из способов:
#include <iostream>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
namespace logging = boost::log;
int main(int, char*[])
{
// track your own variable here
logging::trivial::severity_level my_log_level = logging::trivial::trace;
// with this filter
auto filt = logging::filter(logging::trivial::severity >= my_log_level);
logging::core::get()->set_filter(filt);
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
// now you have control
if (my_log_level <= logging::trivial::trace)
{
std::cout << "tracing\n";
}
return 0;
}
Это не отвечает на вопрос. Должен быть какой-то способ условно выполнить произвольный код в соответствии с серьезностью. – bobeff
Выяснит ответ. К сожалению, вы ошибочно принимаете –
@bobeff ответ обновляется с примером того, как отслеживать свой собственный уровень ведения журнала –