2014-01-20 86 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 
);