NS_BEGIN_MH void MHLog::init() { _logCore = logging::core::get(); typedef sinks::synchronous_sink<sinks::text_ostream_backend> TextSink; BSPtr<TextSink> sink = boost::make_shared<TextSink>(); sink->locked_backend()->add_stream(boost::make_shared<std::ofstream>("log/sign.log")); sink->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 ); BSPtr<std::ostream> consoleStream(&std::clog, boost::null_deleter()); sink->locked_backend()->add_stream(consoleStream); _logCore->add_sink(sink); logging::add_common_attributes(); BOOST_LOG_SCOPED_THREAD_TAG("ThreadID", boost::this_thread::get_id()); }
DefaultLogger::DefaultLogger(const std::string& clientId, const std::string& logFileName): clientId_(clientId), pSink_(new text_sink) { text_sink::locked_backend_ptr pBackend = pSink_->locked_backend(); boost::shared_ptr< std::ostream > consoleStream(&std::clog, [](const void *)->void const {}); pBackend->add_stream(consoleStream); if (!logFileName.empty()) { boost::shared_ptr< std::ofstream > fileStream(new std::ofstream(logFileName.c_str())); pBackend->add_stream(fileStream); } pSink_->set_formatter(boost::log::expressions::stream << '[' << boost::log::expressions::attr< std::string > ("id") << ']' << '[' << boost::log::expressions::attr< boost::posix_time::ptime >("TimeStamp") << ']' << '[' << boost::log::expressions::attr< boost::log::attributes::current_thread_id::value_type >("ThreadID") << ']' << '[' << boost::log::expressions::attr< boost::log::trivial::severity_level >("Severity") << ']' << boost::log::expressions::smessage); pSink_->set_filter(boost::log::expressions::begins_with(boost::log::expressions::attr< std::string >("id"), clientId_.c_str())); pBackend->auto_flush(true); boost::log::core::get()->add_global_attribute("TimeStamp", boost::log::attributes::local_clock()); boost::log::core::get()->add_global_attribute("ThreadID", boost::log::attributes::current_thread_id()); boost::log::core::get()->add_sink(pSink_); }