【发布时间】:2020-02-06 16:45:39
【问题描述】:
我是 Boost.Log 的新手。我想以以下格式打印数据:
[TimeStamp][Severity] Message.
我有这样的代码
auto my_formatter = [](boost::log::record_view const& rec, boost::log::formatting_ostream& strm)
{
strm << "[" << boost::log::expressions::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S") << "]";
strm << "[" << rec[boost::log::trivial::severity] << "] ";
strm << rec[boost::log::expressions::smessage];
};
void addFileSink()
{
using sinkType = boost::log::sinks::synchronous_sink<boost::log::sinks::text_file_backend>;
auto backend = boost::make_shared<boost::log::sinks::text_file_backend>(
boost::log::keywords::file_name = "log_%N.log",
boost::log::keywords::rotation_size = 10 * 1024 * 1024,
boost::log::keywords::open_mode = std::ios_base::app
);
boost::shared_ptr<sinkType> sink(new sinkType(backend));
sink->set_formatter(my_formatter);
sink->set_filter(boost::log::trivial::severity >= boost::log::trivial::severity_level::info);
boost::log::core::get()->add_sink(sink);
}
void addConsoleSink()
{
using sinkType = boost::log::sinks::synchronous_sink<boost::log::sinks::text_ostream_backend>;
auto backend = boost::make_shared<boost::log::sinks::text_ostream_backend>();
backend->add_stream(boost::shared_ptr<std::ostream>(&std::cout, boost::null_deleter()));
backend->auto_flush(true);
boost::shared_ptr<sinkType> sink(new sinkType(backend));
sink->set_formatter(my_formatter);
sink->set_filter(boost::log::trivial::severity >= boost::log::trivial::severity_level::error);
boost::log::core::get()->add_sink(sink);
}
int main()
{
boost::log::add_common_attributes();
addFileSink();
addConsoleSink();
boost::log::sources::severity_logger<boost::log::trivial::severity_level> lg;
BOOST_LOG_SEV(lg, boost::log::trivial::severity_level::error) << "Message error";
BOOST_LOG_SEV(lg, boost::log::trivial::severity_level::info) << "Message info";
return 0;
}
它在 TimeStamp 属性旁边工作正常,我得到这样的输出:
[[error] Message error
我尝试了与示例等不同的方法,但我找不到这个问题的解决方案..
boost::log::add_common_attributes(); 没有帮助。
【问题讨论】: