【发布时间】:2016-12-02 18:50:14
【问题描述】:
例如,我的日志消息有 4 个级别(或属性):
"error","warning","exception","action".
我想将属性为“error”或“exception”的消息打印到fatal.log,并将属性为“action”和“warning”的消息打印到regular.log。
通过在线搜索:
boost::shared_ptr<sinks::text_multifile_backend> backend = boost::make_shared< sinks::text_multifile_backend >();
backend->set_file_name_composer
(
sinks::file::as_file_name_composer(boost::log::expressions::stream << boost::log::expressions::attr< std::string >("level") << ".log")
);
typedef sinks::synchronous_sink< sinks::text_multifile_backend > sink_t;
boost::shared_ptr< sink_t > sink(new sink_t(backend));
// Set the formatter
sink->set_formatter
(
boost::log::expressions::stream
<< boost::log::expressions::attr< std::string >("level")
<< boost::log::expressions::smessage
);
看来我可以按级别(属性)生成不同的日志文件并使用
BOOST_LOG_SEV(_logger, level) << message;
将不同的消息打印到不同的日志。但这似乎会生成 4 个日志,而不仅仅是 2 个日志,因为我有 4 个级别(属性)。如何将带有属性的消息打印到一个日志中,将带有其他属性的消息打印到另一个日志中?
【问题讨论】:
-
你可能可以通过在你的文件接收器上设置过滤器来解决这个问题,一个是过滤属性等于“错误”或“异常”,另一个是“操作”和“警告”