2013-07-29 18 views
6

Yükseltme günlüğümü C++ programımda kullanıyorum ve tanımladığım bir ciddiyet_ölçümü kullanarak bir özel severity_logger<severity_level> kullanıyorum. Ardından, "%TimeStamp% [%ThreadID%] %Severity% %Module% - %Message%" biçim dizgisi ile günlük havuzumu oluşturuyorum ancak %Severity% adresimin bulunduğu yerde önemsiz görüntülemiyor ancak bunun yerine bu konumda boş bırakılıyor. Örneğin, 2013-07-29 10:31 [0xDEADBEEF] my.Module - Hello World. Ciddiyet düzeyini görüntülemek için format dizimde ne yapmam gerekiyor?Yükseltme Günlüğünde, özel bir önemlilik_levelini biçim dizesi kullanarak nasıl biçimlendiririm?

İşte benim kod kısmını oluşturuyor:

#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

Soru http://stackoverflow.com/questions/15853981/boost-log-2-0-empty-severity-level- ilişkili gibi görünmektedir in-günlükleri. Aynı problemim var, ciddiyet_logger ile birlikte format dizisinde% Severity% değerini sağlamaz. – SebastianK

cevap

0

Sen LOG_CREATE_SINK yöntemini çağırmadan önce

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

eklemek gerekir. Şunun gibi:

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; 
} 

Sonuç:

[] TRACE - text message 
İlgili konular