In Boost Log, how do I format a user severity using a format string?

I use boost log in my C ++ program and I have a custom severity_logger< severity_level > using the severity_level enumeration that I defined. Then I create my system receiver with the format string "%TimeStamp% [%ThreadID%] %Severity% %Module% - %Message%" , but it doesnโ€™t show the severity level, where I have %Severity% , but instead thereโ€™s just an empty spot in this position. For example, 2013-07-29 10:31 [0xDEADBEEF] my.Module - Hello World . What do I need to do in the format string to display the severity level?

Here is part of my 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 ); } 
+6
source share
1 answer

You must add

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

before calling the LOG_CREATE_SINK method. Like this:

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

Result:

 [] TRACE - text message 
0
source

Source: https://habr.com/ru/post/950565/


All Articles