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
或使用专门用于 MessageSeverity
的 logger。
boost::log::sources::severity_logger< MessageSeverity > lg;
BOOST_LOG_SEV(lg, MessageSeverity::warning) << "Hello, warning.";
我在使用 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
或使用专门用于 MessageSeverity
的 logger。
boost::log::sources::severity_logger< MessageSeverity > lg;
BOOST_LOG_SEV(lg, MessageSeverity::warning) << "Hello, warning.";