我对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;
}
}
答案 0 :(得分:2)
BOOST_LOG_TRIVIAL
会发出严重级别为boost::log::trivial::severity_level
的日志记录。这是您应该在custom_event_type_mapping
中预期的属性值类型,而不是MessageSeverity
。由于类型不匹配,因此库无法从日志记录中提取严重性级别,并使用sinks::event_log::info
作为映射事件类型作为后备。
您应该在事件类型映射器中使用boost::log::trivial::severity_level
,或者使用专用于MessageSeverity
的{{3}}。
boost::log::sources::severity_logger< MessageSeverity > lg;
BOOST_LOG_SEV(lg, MessageSeverity::warning) << "Hello, warning.";
答案 1 :(得分:0)
您是否尝试将日志级别注册到严重性属性?
这就是我要用的:
#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;
}
}