【问题标题】:In Boost Log, how do I format a custom severity_level using a format string?在 Boost Log 中,如何使用格式字符串格式化自定义的 severity_level?
【发布时间】:2013-07-29 15:03:48
【问题描述】:

我在我的 C++ 程序中使用 boost 日志,并且我有一个自定义 severity_logger< severity_level > 使用我定义的 severity_level 枚举。然后我使用格式字符串"%TimeStamp% [%ThreadID%] %Severity% %Module% - %Message%" 创建我的日志接收器,但它没有显示我拥有%Severity% 的严重性,而是在那个位置只是空白。例如,2013-07-29 10:31 [0xDEADBEEF] my.Module - Hello World。我需要在我的格式字符串中做什么才能显示严重性级别?

这是我的代码的一部分:

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

【问题讨论】:

标签: boost boost-log


【解决方案1】:

你应该添加

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

在调用 LOG_CREATE_SINK 方法之前。像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多