0
稱爲當我用格式化的boost::log
輸出在我的DLL,名爲libfoo的和一個Win32控制檯應用程序exefoo使用。代碼是的boost ::日誌格式無效從DLL
// #include various boost log headers
void __declspec(dllexport) add_boost_log_console_sink()
{
boost::log::add_common_attributes();
boost::shared_ptr<text_sink> sink = boost::make_shared<text_sink>();
sink->locked_backend()->add_stream(boost::shared_ptr<std::ostream>(&std::cout, boost::null_deleter()));
sink->set_formatter(xspectra::get_our_formatter(false));
sink->set_filter(boost::log::trivial::severity >= boost::log::trivial::info
&&
boost::log::expressions::has_attr(tag_attr) == false);
boost::log::core::get()->add_sink(sink);
}
boost::log::formatter __declspec(dllexport) get_our_formatter(bool bSubSeconds)
{
std::string sTimeStamp("%H:%M:%S");
if (bSubSeconds)
sTimeStamp += ".%f";
return boost::log::expressions::stream
//<< std::hex //To print the LineID in Hexadecimal format
<< std::setw(6) << std::setfill('0')
<< line_id
<< "\t"
<< boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", sTimeStamp)
<< " <" << boost::log::trivial::severity
<< "> \t"
/*
<< boost::log::expressions::if_(boost::log::expressions::has_attr(tag_attr))
[
boost::log::expressions::stream << "[" << tag_attr << "]\t" TAGS SUSPENDED
]
*/
<< boost::log::expressions::smessage;
}
在libfoo的的主體,公開的對象,我打電話-once-的main()
的exefoo內add_boost_log_console_sink();
相同的呼叫。
以後每BOOST_LOG_TRIVIAL(severity)
呼叫內libfoo的正在生產格式化輸出,而內部exefoo每一個類似的呼籲沒有。
對於代碼模塊性的目的,我移動這些功能到一個新的DLL,liblog,通過libfoo的和exefoo使用。現在每個日誌都是而不是格式。
看來,這個代碼從某個DLL加載不會產生任何影響;我希望它能做到。
你是否會動態鏈接Boost.Log(即dlls)?你定義了'BOOST_LOG_DYN_LINK'還是'BOOST_ALL_DYN_LINK'? –
我沒有,我靜態鏈接到'libboost_log-vc140-mt-1_60.lib'。但是* liblog *和* libfoo *是dll。也許我應該至少將* liblog *改爲靜態庫。 –
這是問題的根源。如果從不同模塊使用Boost.Log,則需要將其構建爲共享庫。 http://www.boost.org/doc/libs/1_62_0/libs/log/doc/html/log/installation/config.html –