2015-05-18 41 views
2

我希望能夠從配置指定日誌嚴重性級別:如何從配置設置提升日誌記錄嚴重性級別?

# my config file 
LogSeverity = info 

我怎樣才能做到這一點?目前,我有這樣的事情在我main功能:

// logging settings 
boost::log::trivial::severity_level logSeverity; 
boost::program_options::options_description loggingSettings      
    ("Logging settings");              
loggingSettings.add_options()             
("LogSeverity", value<boost::log::trivial::severity_level>(&logSeverity)  
    ->required(),                
     "log level to output"); 

variables_map vm; 
store(parse_config_file(configFilestream, loggingSettings), vm); 
notify(vm); 

boost::log::core::get()->set_filter(           
    boost::log::trivial::severity >= logSeverity); 
BOOST_LOG_TRIVIAL(info) << "severity " << logSeverity; 

這個程序的輸出是:

[2015年5月18日09:58:40.783298] [0x000007f017445078] [資訊]嚴重性跟蹤

不過,我設定的嚴重性info在我的配置(如上),所以爲什麼它被設置爲trace

+0

你是什麼意思它不是「被認可」? –

+0

@LightnessRacesinOrbit我在配置中將它設置爲'info',但它在輸出中作爲'trace'出現。我改變了問題中的措詞,使其更清楚。 – arman

+0

@quant什麼事?現在你已經編輯了你的問題,並添加了我的答案,有什麼評論? Sill不工作? – doqtor

回答

6

工作的完整示例:

default.conf:

# my config file 
LogSeverity = info 

main.cpp中:

#include <string> 
#include <fstream> 

#include <boost/log/trivial.hpp> 
#include <boost/log/expressions.hpp> 
#include <boost/program_options.hpp> 

int main() 
{ 
    // logging settings 
    boost::log::trivial::severity_level logSeverity; 
    boost::program_options::options_description loggingSettings 
    ("Logging settings"); 
    loggingSettings.add_options() 
    ("LogSeverity", boost::program_options::value<boost::log::trivial::severity_level>(&logSeverity) 
    ->required(), 
    "log level to output"); 

    std::ifstream conf_file("./default.conf"); 
    if (!conf_file) 
     return 1; 

    boost::program_options::variables_map variables_map; 
    boost::program_options::store(boost::program_options::parse_config_file(conf_file, loggingSettings), variables_map); 
    boost::program_options::notify(variables_map); 

    boost::log::core::get()->set_filter(
    boost::log::trivial::severity >= logSeverity); 
    BOOST_LOG_TRIVIAL(info) << "severity " << logSeverity; 

    return 0; 
} 

輸出:

[2015-05-19 01:22:57.666571] [0xc000027d] [info] severity info 
0

這個問題似乎已經是你不能直接y分配給來自program_options的boost::log::trivia::severity類型。爲了得到這個工作,我存儲着的變量在std::string,然後用>>運營商的價值送入severity類型:

// logging settings 
std::string logSeverityString; 
boost::log::trivial::severity_level logSeverity; 
boost::program_options::options_description loggingSettings      
    ("Logging settings");              
loggingSettings.add_options()             
("LogSeverity", value<boost::log::trivial::severity_level>(&logSeverityString)  
    ->required(),                
     "log level to output"); 

variables_map vm; 
store(parse_config_file(configFilestream, loggingSettings), vm); 
notify(vm); 

std::istringstream{logSeverityString} >> logSeverity; 
boost::log::core::get()->set_filter(           
    boost::log::trivial::severity >= logSeverity); 
BOOST_LOG_TRIVIAL(info) << "severity " << logSeverity; 
+0

我已經附上完整的工作示例,它爲我工作。 logSeverity應該在'notify'調用後設置。如果情況並非如此,那麼有些事情是錯誤的。 – doqtor

+0

@doqtor有趣,這不適合我。什麼是你的增強版本?我正在使用1.55。 – arman

+0

我正在使用boost 1.56 – doqtor

相關問題