C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Boost Log中,如何使用格式字符串格式化自定义severity_level?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的C程序中使用boost log,我有一个@L_450_2@severity_logger< severity_level>使用我定义的severity_level枚举.然后我使用格式字符串“%timestamp%[%ThreadID%]%严重性%%模块% – %消息%”创建我的日志接收器,但它没有显示我有%严重性百分比的严重性,但它只是空白那个位置.例如,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::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

大佬总结

以上是大佬教程为你收集整理的在Boost Log中,如何使用格式字符串格式化自定义severity_level?全部内容,希望文章能够帮你解决在Boost Log中,如何使用格式字符串格式化自定义severity_level?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。