void init() { boost::log::add_common_attributes<wchar_t>(); typedef boost::log::aux::add_common_attributes_constants<wchar_t> traits_t; typedef boost::log::sinks::synchronous_sink<boost::log::sinks::wtext_file_backend> file_sink_type; typedef boost::log::sinks::asynchronous_sink<boost::log::sinks::wtext_ostream_backend> stream_sink_type; auto stream_backend = boost::make_shared<boost::log::sinks::wtext_ostream_backend>(); stream_backend->add_stream(boost::shared_ptr<std::wostream>(&std::wcout, boost::log::empty_deleter())); stream_backend->auto_flush(true); auto stream_sink = boost::make_shared<stream_sink_type>(stream_backend); //#ifdef NDEBUG // stream_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug); //#else // stream_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug); //#endif stream_sink->locked_backend()->set_formatter(&my_formatter); boost::log::wcore::get()->add_sink(stream_sink); }
void LoggerFactory::setDestinationImpl(std::ostream& os) { std::lock_guard<std::mutex> lock(m_mutex); auto backend = boost::make_shared<boost::log::sinks::text_ostream_backend>(); backend->auto_flush(true); backend->add_stream(boost::shared_ptr<std::ostream>(&os, bind([]{}))); boost::log::core::get()->remove_sink(m_sink); m_sink.reset(); m_sink = boost::make_shared<Sink>(backend); m_sink->set_formatter(boost::log::expressions::stream << boost::log::expressions::message); boost::log::core::get()->add_sink(m_sink); }
LoggerFactory::LoggerFactory() : m_defaultLevel(LOG_INFO) { m_levelNames["NONE"] = LOG_NONE; m_levelNames["ERROR"] = LOG_ERROR; m_levelNames["WARN"] = LOG_WARN; m_levelNames["INFO"] = LOG_INFO; m_levelNames["DEBUG"] = LOG_DEBUG; m_levelNames["TRACE"] = LOG_TRACE; m_levelNames["ALL"] = LOG_ALL; auto backend = boost::make_shared<boost::log::sinks::text_ostream_backend>(); backend->auto_flush(true); backend->add_stream(boost::shared_ptr<std::ostream>(&std::clog, bind([]{}))); m_sink = boost::make_shared<Sink>(backend); m_sink->set_formatter(boost::log::expressions::stream << boost::log::expressions::message); boost::log::core::get()->add_sink(m_sink); }
void add_cout_sink() { boost::log::add_common_attributes(); // boost::log::core::get()->add_global_attribute("NativeThreadId", // boost::log::attributes::make_function(&std::this_thread::get_id)); boost::log::core::get()->add_global_attribute("TimestampMillis", boost::log::attributes::make_function([] { return boost::posix_time::microsec_clock::local_time(); })); using stream_sink_type = sinks::asynchronous_sink<sinks::wtext_ostream_backend>; auto stream_backend = boost::make_shared<boost::log::sinks::wtext_ostream_backend>(); stream_backend->add_stream(boost::shared_ptr<std::wostream>(&std::wcout, boost::null_deleter())); stream_backend->auto_flush(true); auto stream_sink = boost::make_shared<stream_sink_type>(stream_backend); stream_sink->set_formatter(boost::bind(&my_formatter<boost::log::wformatting_ostream>, false, _1, _2)); logging::core::get()->add_sink(stream_sink); }
void Logging::setDestinationImpl(shared_ptr<std::ostream> os) { std::lock_guard<std::mutex> lock(m_mutex); m_destination = std::move(os); auto backend = boost::make_shared<boost::log::sinks::text_ostream_backend>(); backend->auto_flush(true); backend->add_stream(boost::shared_ptr<std::ostream>(m_destination.get(), [] (auto) {})); if (m_sink != nullptr) { boost::log::core::get()->remove_sink(m_sink); m_sink->flush(); m_sink.reset(); } m_sink = boost::make_shared<Sink>(backend); m_sink->set_formatter(boost::log::expressions::stream << boost::log::expressions::message); boost::log::core::get()->add_sink(m_sink); }
BOOST_LOG_GLOBAL_LOGGER_INIT(__logger, bl::sources::severity_logger_mt) { bl::sources::severity_logger_mt<boost::log::trivial::severity_level> logger; logger.add_attribute("TimeStamp", bl::attributes::local_clock()); using text_sink = bl::sinks::asynchronous_sink<bl::sinks::text_ostream_backend>; auto consoleSink = boost::make_shared<text_sink>(); consoleSink->locked_backend()->add_stream(boost::shared_ptr<std::ostream>(&std::cout, boost::null_deleter())); consoleSink->set_filter(severity >= boost::log::trivial::severity_level::warning); using file_sink = bl::sinks::asynchronous_sink<bl::sinks::text_file_backend>; auto logfileSink = boost::make_shared<file_sink>(); { auto logfileBackend = logfileSink->locked_backend(); logfileBackend->set_time_based_rotation(bl::sinks::file::rotation_at_time_point(0, 0, 0)); logfileBackend->set_file_name_pattern("Logs\\ashbot_%Y%m%d.log"); logfileBackend->auto_flush(); logfileBackend->set_file_collector( bl::sinks::file::make_collector(bl::keywords::target = "Logs\\Archive") ); } namespace expr = bl::expressions; bl::formatter fmt = expr::stream << format_date_time(timestamp, "%Y-%m-%d %H:%M:%S.%f") << " [" << boost::log::trivial::severity << "] " << expr::smessage; logfileSink->set_formatter(fmt); bl::core::get()->add_sink(consoleSink); bl::core::get()->add_sink(logfileSink); return logger; }
//Defines a global logger initialization routine BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, logger_t) { logger_t lg; logging::add_common_attributes(); #if 0 auto flsink = logging::add_file_log( boost::log::keywords::file_name = SYS_LOGFILE, boost::log::keywords::format = ( expr::stream << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S") << " [" << expr::attr< boost::log::trivial::severity_level >("Severity") << "]: " << expr::wmessage ) ); flsink->imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16<wchar_t>)); #endif boost::shared_ptr<logging::core> core = logging::core::get(); #if 0 boost::shared_ptr<sinks::text_ostream_backend> ostream_backend = boost::make_shared<sinks::text_ostream_backend>(); ostream_backend->add_stream( boost::shared_ptr<std::ostream>(&std::clog, logging::empty_deleter())); ostream_backend->auto_flush(true); typedef sinks::synchronous_sink<sinks::text_ostream_backend> sink_ostream_t; boost::shared_ptr<sink_ostream_t> sink_ostream(new sink_ostream_t(ostream_backend)); sink_ostream->set_formatter( expr::format("[%1%] [%2%]\t%3%") % expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") % logging::trivial::severity % expr::message); core->add_sink(sink_ostream); #endif // ログのファイル出力を設定 auto text_backend = boost::make_shared<sinks::text_file_backend>( boost::log::keywords::file_name = static_cast<LPCWSTR>(Misc::GetExeDirectory() + SYS_LOGFILE) ); text_backend->auto_flush(true); typedef sinks::synchronous_sink<sinks::text_file_backend> sink_text_t; boost::shared_ptr<sink_text_t> sink_text(new sink_text_t(text_backend)); sink_text->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::wmessage); sink_text->imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16<wchar_t>)); core->add_sink(sink_text); #ifdef _DEBUG // ログのコンソール出力を設定 ::AllocConsole(); //::SetConsoleOutputCP(CP_UTF8); FILE* out = nullptr; freopen_s(&out, "CON", "w", stdout); auto console_sink = logging::add_console_log(std::wcout); console_sink->set_formatter( expr::format(L"%1% [%2%]: %3%") % expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S") % logging::trivial::severity % expr::wmessage); //console_sink->imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16<wchar_t>)); #endif logging::core::get()->set_filter ( #ifdef _DEBUG logging::trivial::severity >= logging::trivial::info #else logging::trivial::severity >= logging::trivial::error #endif ); return lg; }