2014-01-20 52 views
0

我有一個使用boost :: log版本2(來自Boost 1.55)的小型項目。我想記錄到文件中,所以我初始化這樣的:Boost :: log在初始化後立即停止記錄

void initializeLogging(boost::log::trivial::severity_level level) 
{   
    logging::add_common_attributes();                

    logging::add_file_log(
     keywords::file_name = "sample.%02N.log", 
     keywords::open_mode = std::ios::app, 
     keywords::format = "[%TimeStamp%] %Message%" 
    ); 

    logging::core::get()->set_filter 
    (
     logging::trivial::severity >= level 
    ); 

    boost::log::sources::severity_logger<boost::log::trivial::severity_level> lg; 

    BOOST_LOG_SEV(lg, boost::log::trivial::error) << "INSIDE An error severity message"; 
} 

我看到這個文件sample.00.log行INSIDE An error severity message

但是,當我打電話doStuff,之後,initializeLogging什麼都沒有記錄。

void doStuff() 
{ 
    boost::log::sources::severity_logger<boost::log::trivial::severity_level> lg; 

    BOOST_LOG_SEV(lg, boost::log::trivial::error) << "An error severity message"; 
} 

此代碼是在Windows程序中,沒有控制檯可以查看。 Windows調試日誌中也沒有任何內容。

如您所見,doStuff與第一個函數中的代碼完全相同。有什麼我需要做我的日誌設置永久?

回答

1

boost::log::sources::severity_logger<boost::log::trivial::severity_level>單身?

您爲doStuff()創建了另一個局部變量lg,如果它不是單例,它將不會進行初始化。

初始化:

logging::add_common_attributes();                

logging::add_file_log(
    keywords::file_name = "sample.%02N.log", 
    keywords::open_mode = std::ios::app, 
    keywords::format = "[%TimeStamp%] %Message%" 
); 

logging::core::get()->set_filter 
(
    logging::trivial::severity >= level 
);