boost log库使用六

来源:互联网 发布:苹果抢购软件 编辑:程序博客网 时间:2024/06/04 19:38

这次演示如何在一个程序中使用两个sink. 这两个sink有不同的filter,生成两个日志文件,采用不同的日志格式。

完整代码如下:

#include <fstream>#include <boost/shared_ptr.hpp>#include <boost/make_shared.hpp>#include <boost/log/core.hpp>#include <boost/log/trivial.hpp>#include <boost/log/expressions.hpp>#include <boost/log/sinks/sync_frontend.hpp>#include <boost/log/sinks/text_ostream_backend.hpp>#include <boost/log/sources/severity_logger.hpp>#include <boost/log/sources/record_ostream.hpp>#include <boost/log/utility/setup/common_attributes.hpp>#include <boost/log/support/date_time.hpp>#include <boost/thread/thread.hpp>#include <boost/log/attributes/scoped_attribute.hpp>namespace logging = boost::log;namespace src = boost::log::sources;namespace expr = boost::log::expressions;namespace sinks = boost::log::sinks;namespace keywords = boost::log::keywords;using namespace logging::trivial;void InitLog() {  typedef sinks::synchronous_sink< sinks::text_ostream_backend > text_sink;  boost::shared_ptr< text_sink > sink1 = boost::make_shared< text_sink >();  sink1->locked_backend()->add_stream(         boost::make_shared< std::ofstream >("sign.log"));  sink1->set_formatter (         expr::format("[%1%]<%2%>(%3%): %4%")         % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")         % logging::trivial::severity         % expr::attr<boost::log::attributes::current_thread_id::value_type >("ThreadID")         % expr::smessage         );  logging::core::get()->add_sink(sink1);  sink1->set_filter(expr::attr< severity_level >("Severity") >= warning);  boost::shared_ptr< text_sink > sink2 = boost::make_shared< text_sink >();  sink2->locked_backend()->add_stream(         boost::make_shared< std::ofstream >("sign.csv"));  sink2->set_formatter (         expr::format("%1%,%2%,%3%")         % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")         % logging::trivial::severity         % expr::smessage         );  logging::core::get()->add_sink(sink2);  sink2->set_filter(expr::attr< severity_level >("Severity") < warning);  logging::add_common_attributes();  BOOST_LOG_SCOPED_THREAD_TAG("ThreadID", boost::this_thread::get_id());}int main(int, char*[]) {  InitLog();  src::severity_logger<severity_level> lg;  BOOST_LOG_SEV(lg, trace) << "A trace severity message";  BOOST_LOG_SEV(lg, debug) << "A debug severity message";  BOOST_LOG_SEV(lg, info) << "An informational severity message";  BOOST_LOG_SEV(lg, warning) << "A warning severity message";  BOOST_LOG_SEV(lg, error) << "An error severity message";  BOOST_LOG_SEV(lg, fatal) << "A fatal severity message";  return 0;}
在上面的例子里面,我创建了sink1 和 sink2对象。sink1输出sign.log文件,sink2输出sign.csv文件。

所有严重级别大于等于warning的日志会出现在sign.log文件中,所有低于warning的日志会被记录在sign.csv文件中,并以csv格式保存。

运行这个例子会看到两个文件的结果:

$ cat sign.csv2013-12-25 16:31:27,trace,A trace severity message2013-12-25 16:31:27,debug,A debug severity message2013-12-25 16:31:27,info,An informational severity message $ cat sign.log[2013-12-25 16:31:27]<warning>(0x00007f64b5cf3740): A warning severity message[2013-12-25 16:31:27]<error>(0x00007f64b5cf3740): An error severity message[2013-12-25 16:31:27]<fatal>(0x00007f64b5cf3740): A fatal severity message



1 0
原创粉丝点击