2016-11-29 87 views
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()exefooadd_boost_log_console_sink();相同的呼叫。

以后每BOOST_LOG_TRIVIAL(severity)呼叫libfoo的正在生产格式化输出,而内部exefoo每一个类似的呼吁没有。

对于代码模块性的目的,我移动这些功能到一个新的DLL,liblog,通过libfoo的exefoo使用。现在每个日志都是而不是格式。

看来,这个代码从某个DLL加载不会产生任何影响;我希望它能做到。

+0

你是否会动态链接Boost.Log(即dlls)?你定义了'BOOST_LOG_DYN_LINK'还是'BOOST_ALL_DYN_LINK'? –

+0

我没有,我静态链接到'libboost_log-vc140-mt-1_60.lib'。但是* liblog *和* libfoo *是dll。也许我应该至少将* liblog *改为静态库。 –

+0

这是问题的根源。如果从不同模块使用Boost.Log,则需要将其构建为共享库。 http://www.boost.org/doc/libs/1_62_0/libs/log/doc/html/log/installation/config.html –

回答

0

Andrey Semashev提供的洞察,我切换liblog配置类型从动态到静态库。现在一切正常。