2013-07-29 3 views
6

मैं अपने सी ++ प्रोग्राम में बूस्ट लॉग का उपयोग कर रहा हूं, और मेरे पास परिभाषित एक गंभीरता_लेवल एनम का उपयोग कर कस्टम severity_logger<severity_level> है। फिर मैं प्रारूप स्ट्रिंग "%TimeStamp% [%ThreadID%] %Severity% %Module% - %Message%" के साथ अपना लॉग सिंक बना देता हूं लेकिन यह गंभीरता प्रदर्शित नहीं करता है जहां मेरे पास %Severity% है लेकिन इसके बजाय उस स्थिति में बस खाली है। उदाहरण के लिए, 2013-07-29 10:31 [0xDEADBEEF] my.Module - Hello World। गंभीरता के स्तर को प्रदर्शित करने के लिए मुझे अपने प्रारूप स्ट्रिंग में क्या करने की ज़रूरत है?बूस्ट लॉग में, मैं एक प्रारूप स्ट्रिंग का उपयोग कर कस्टम severity_level कैसे प्रारूपित करूं?

यहाँ मेरी कोड के एक हिस्से को बताया गया है:

#define NUM_SEVERITY_LEVELS 6 
enum severity_level 
{ 
    // These are deliberately the same levels that log4j uses 
    trace = 0, 
    debug = 1, 
    info = 2, 
    warning = 3, 
    error = 4,     
    fatal = 5     
}; 

typedef src::severity_logger<severity_level> logger_t; 

const char* severity_level_str[NUM_SEVERITY_LEVELS] = { 
    "TRACE", 
    "DEBUG", 
    "INFO", 
    "WARNING", 
    "ERROR", 
    "FATAL" 
}; 

template< typename CharT, typename TraitsT > 
std::basic_ostream< CharT, TraitsT >& 
operator<< (
    std::basic_ostream< CharT, TraitsT >& strm, 
    severity_level lvl 
) 
{ 
    const char* str = severity_level_str[lvl]; 
    if (lvl < NUM_SEVERITY_LEVELS && lvl >= 0) 
     strm << str; 
    else 
     strm << static_cast<int>(lvl); 
    return strm; 
} 

#define FORMAT_STRING "%TimeStamp% [%ThreadID%] %Severity% %Module% - %Message%" 

boost::shared_ptr< sinks::synchronous_sink<sinks::text_file_backend> > 
LOG_CREATE_SINK(const std::string& strLogFilename, bool fAutoFlush) 
{ 
    return logging::add_file_log(
    keywords::file_name = strLogFilename, 
    keywords::open_mode = (std::ios_base::app | std::ios_base::out) & ~std::ios_base::in, 
    keywords::auto_flush = fAutoFlush, 
    keywords::format = FORMAT_STRING); 
} 
+0

प्रश्न http://stackoverflow.com/questions/15853981/boost-log-2-0-empty-severity-level- से संबंधित प्रतीत हो रहा है में लॉग। मुझे एक ही समस्या है, प्रारूप स्ट्रिंग में% गंभीरता% प्रदान करने के साथ severity_logger काम नहीं करता है। – SebastianK

उत्तर

0

आप LOG_CREATE_SINK विधि कॉल करने से पहले

boost::log::register_simple_formatter_factory< severity_level, char >("Severity"); 

जोड़ना चाहिए। इस तरह:

int main(int argc, char* argv[]) 
{ 
    boost::log::register_simple_formatter_factory< severity_level, char >("Severity"); 
    LOG_CREATE_SINK("log_file.txt", true); 
    logger_t logger; 
    BOOST_LOG_SEV(logger, trace) 
      << "text message"; 
    return 0; 
} 

परिणाम:

[] TRACE - text message 
संबंधित मुद्दे