2013-07-29 2 views
6

Ich verwende Boost-Log in meinem C++ - Programm, und ich habe eine benutzerdefinierte severity_logger<severity_level> mit einem Schweregrad level, die ich definiert. Dann erstelle ich meine Log-Senke mit der Formatzeichenkette "%TimeStamp% [%ThreadID%] %Severity% %Module% - %Message%", aber es zeigt nicht den Schweregrad an, in dem ich %Severity% habe, sondern bin nur leer in dieser Position. Zum Beispiel 2013-07-29 10:31 [0xDEADBEEF] my.Module - Hello World. Was muss ich in meiner Formatzeichenfolge tun, damit der Schweregrad angezeigt wird?In Boost Log, wie formatiere ich einen benutzerdefinierten Schweregrad mit einer Formatzeichenfolge?

Hier ist ein Teil meines Code:

#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

Frage scheint http://stackoverflow.com/questions/15853981/boost-log-2-0-empty-severity-level- bezogen zu werden in-logs. Ich habe das gleiche Problem, wenn% Severity% in der Formatzeichenkette zusammen mit severity_logger nicht funktioniert. – SebastianK

Antwort

0

Sie

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

vor dem Aufruf LOG_CREATE_SINK Methode hinzufügen sollen. Wie folgt aus:

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

Ergebnis:

[] TRACE - text message 
Verwandte Themen