Журнал событий Boost не отображает события должным образом

У меня есть некоторые проблемы с логгером буст-событий. Когда я пытаюсь войти в журнал событий, используя BOOST_LOG_TRIVIAL Я не получаю серьезности в программе просмотра событий. (все отображается как информация, но не как предупреждение, ошибка и т. д.). Библиотека повышения динамически связана с приложением. Я использую 1.57 версию библиотеки.

Вот скриншот. Каждое событие должно отображаться как предупреждение, но это не так.Просмотр журнала событий

Вот мой код инициализации:

try
{
boost::log::add_common_attributes(); //edit
boost::shared_ptr<sink_t> sink(new sink_t
(
log_name = "test_app",
log_source = "test_app"));

sink->set_formatter
(
expr::format("[%1%] - %2%")
% expr::attr<ptime>("TimeStamp")
% expr::smessage
);

sinks::event_log::custom_event_type_mapping<MessageSeverity> mapping("Severity");
mapping[MessageSeverity::error] = sinks::event_log::error;
mapping[MessageSeverity::warning] = sinks::event_log::warning;
mapping[MessageSeverity::info] = sinks::event_log::info;

sink->locked_backend()->set_event_type_mapper(mapping);
core::get()->add_sink(sink);
}
catch (const std::exception &e)
{
BOOST_LOG_TRIVIAL(fatal) << e.what();
}

А вот как я регистрирую события

void Logger::log(MessageSeverity severity, const std::string & msg)
{
switch (severity)
{
case MessageSeverity::info:
BOOST_LOG_TRIVIAL(info) << msg;
break;

case MessageSeverity::warning:
BOOST_LOG_TRIVIAL(warning) << msg;
break;

case MessageSeverity::error:
BOOST_LOG_TRIVIAL(error) << msg;
break;

default:
break;
}
}

0

Решение

BOOST_LOG_TRIVIAL выдает записи журнала с уровнем серьезности, имеющим тип boost::log::trivial::severity_level, Это тип значений атрибутов, которые вы должны ожидать в custom_event_type_mapping, не MessageSeverity, Поскольку тип не совпадает, библиотека не может извлечь уровень серьезности из записей журнала и использует sinks::event_log::info как сопоставленный тип события как запасной вариант.

Вы должны либо использовать boost::log::trivial::severity_level в маппере типа события или используйте лесоруб специализируется на MessageSeverity,

boost::log::sources::severity_logger< MessageSeverity > lg;
BOOST_LOG_SEV(lg, MessageSeverity::warning) << "Hello, warning.";
2

Другие решения

Вы пытались зарегистрировать свой уровень журнала для атрибута серьезности?

Вот что я бы использовал:

 #include <boost/log/expressions.hpp>
...
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", MessageSeverity);

Кроме того, ваши журналы вызовов все еще используют уровень серьезности повышения.

Обновите его следующим образом (/! \ Untested):

void Logger::log(MessageSeverity severity, const std::string & msg)
{
switch (severity)
{
case MessageSeverity::info:
case MessageSeverity::warning:
case MessageSeverity::error:
BOOST_LOG_TRIVIAL(severity) << msg;
default:
break;
}
}
0

По вопросам рекламы [email protected]