boost log库 使用十

来源:互联网 发布:淘宝怎么增加自然流量 编辑:程序博客网 时间:2024/05/16 17:17

在boost log库 使用九的demo中,还有一些地方可以提高。

首先,把所有和boost log相关的语句都移到logger.h文件中。任何使用boost log库的程序都可以include 这个logger.h文件。如果你想要不同的sink,可以修改一下InitLog函数。

#include <boost/shared_ptr.hpp>#include <boost/make_shared.hpp>#include <boost/thread/thread.hpp>#include <boost/log/core.hpp>#include <boost/log/sinks/sync_frontend.hpp>#include <boost/log/sinks/text_ostream_backend.hpp>#include <boost/log/sources/record_ostream.hpp>#include <boost/log/support/date_time.hpp>#include <boost/log/common.hpp>#include <boost/log/expressions.hpp>#include <boost/log/attributes.hpp>#include <boost/log/sinks.hpp>#include <boost/log/sources/logger.hpp>#include <boost/log/utility/setup/common_attributes.hpp>#include <boost/log/utility/setup/common_attributes.hpp>#include <boost/log/utility/setup/formatter_parser.hpp>#include <boost/log/sources/severity_logger.hpp>#include <boost/log/sources/severity_feature.hpp>#include <fstream>namespace logging = boost::log;namespace attrs = boost::log::attributes;namespace src = boost::log::sources;namespace sinks = boost::log::sinks;namespace expr = boost::log::expressions;namespace keywords = boost::log::keywords;enum sign_severity_level {  trace,  debug,  info,  warning,  error,  fatal,  report};void InitLog() {  typedef sinks::synchronous_sink<sinks::text_ostream_backend> TextSink;   // init sink1  boost::shared_ptr<sinks::text_ostream_backend> backend1 = boost::make_shared<sinks::text_ostream_backend>();  backend1->add_stream(boost::shared_ptr<std::ostream>(new std::ofstream("sign.log")));  boost::shared_ptr<TextSink> sink1(new TextSink(backend1));  sink1->set_formatter (   expr::format("[%1%]<%2%>(%3%): %4%")   % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")   % expr::attr<sign_severity_level>("Severity")   % expr::attr<attrs::current_thread_id::value_type >("ThreadID")   % expr::smessage   );  sink1->set_filter(expr::attr<sign_severity_level>("Severity") >= warning);  logging::core::get()->add_sink(sink1);  // init sink2  boost::shared_ptr<sinks::text_ostream_backend> backend2 = boost::make_shared<sinks::text_ostream_backend>();  backend2->auto_flush(true);  backend2->add_stream(boost::shared_ptr<std::ostream>(new std::ofstream("sign.csv")));  boost::shared_ptr<TextSink> sink2(new TextSink(backend2));  sink2->set_formatter (   expr::format("%1%,%2%,%3%")   % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")   % expr::attr<sign_severity_level>("Severity")   % expr::smessage   );  sink2->set_filter(expr::attr<sign_severity_level>("Severity") == report);  logging::core::get()->add_sink(sink2);  logging::add_common_attributes();  logging::core::get()->add_global_attribute("ThreadID", attrs::current_thread_id());}BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(my_logger, src::severity_logger_mt<sign_severity_level>)

其次, 阻止程序的crash. 看一下官方的文章:http://www.boost.org/doc/libs/1_55_0/libs/log/doc/html/log/rationale/why_crash_on_term.html

我采用了第二种解决方案,在main函数的退出语句之前加一行

#include "logger.h"int main(int, char*[]) {  InitLog();  src::severity_logger_mt<sign_severity_level>& lg = my_logger::get();  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";  BOOST_LOG_SEV(lg, report) << "A report severity message";  logging::core::get()->remove_all_sinks();  return 0;}

下一次,将在两个sinks上采用rotation log.



1 0
原创粉丝点击