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 –