Boost 事件日志未正确显示事件

Boost event log doesn't display events properly

我在使用 boost 事件记录器时遇到了一些问题。当我尝试使用 BOOST_LOG_TRIVIAL 登录到事件日志时,我在事件查看器中看不到严重性。 (一切都显示为信息,而不是警告、错误等)boost 库动态链接到应用程序。我用的是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;
    }
}

您是否尝试将您的日志级别注册到严重性属性?

这是我要使用的:

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

此外,您的日志记录调用仍在使用提升严重性级别。

更新如下 (/!\ 未测试):

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;
     }
}

BOOST_LOG_TRIVIAL 发出严重级别为 boost::log::trivial::severity_level 的日志记录。那是您应该在 custom_event_type_mapping 而不是 MessageSeverity 中期望的属性值类型。由于类型不匹配,库无法从日志记录中提取严重级别并使用 sinks::event_log::info 作为映射的事件类型作为回退。

您应该在事件类型映射器中使用 boost::log::trivial::severity_level 或使用专门用于 MessageSeveritylogger

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