gpt4 book ai didi

c++ - 如何通过boost::log打印到不同属性的不同日志?

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:43 26 4
gpt4 key购买 nike

例如,我的日志消息有 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 个级别(属性)。如何将具有属性的消息打印到一个日志中,将具有其他属性的消息打印到另一个日志中?

最佳答案

boost documentation借用一些代码,您可能可以使用这种方法:

    using text_sink = sinks::synchronous_sink< sinks::text_ostream_backend >;
boost::shared_ptr< text_sink > sink = boost::make_shared< text_sink >();

sink->locked_backend()->add_stream(
boost::make_shared< std::ofstream >("regular.log"));

// set your 1st formatter

sink->set_filter(expr::has_attr(tag_attr) && (tag_attr == "action" || tag_attr == "warning"));

logging::core::get()->add_sink(sink);

sink = boost::make_shared< text_sink >();

sink->locked_backend()->add_stream(
boost::make_shared< std::ofstream >("fatal.log"));

// set your 2nd formatter

sink->set_filter(expr::has_attr(tag_attr) && (tag_attr == "error" || tag_attr == "exception"));

logging::core::get()->add_sink(sink);

关于c++ - 如何通过boost::log打印到不同属性的不同日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40939083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com