获取boost.log记录器的严重性..?

时间:2014-01-29 07:17:04

标签: c++ boost boost-log boost-logging

假设我有一个简单的boost.log severity_logger记录器设置如下:

   logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug);
   logging::add_common_attributes();
   src::severity_logger< logging::trivial::severity_level > logger;

如何以编程方式检查严重性?
即像logger.getSeverity()这样的东西?

我已经在StackOverflow上筛选了文档和其他问题,但却找不到简单的API调用...?

1 个答案:

答案 0 :(得分:5)

我会说你做不到。日志记录系统分为三层(请参阅日志系统的Design overview)。

  • 您的severity_logger是数据收集层中属性为severity_level的源记录器。

  • 使用logging::core::get()->set_filter(...)设置的严重性是一个为日志记录核心设置的函数对象。在传递给接收器之前,传递给记录器的所有消息都将被该功能对象过滤。

因此,severity实际上没有severity_logger这样的事情。严重性只是传递给核心,然后传递到接收器。


编辑:在阐述我的评论时,您还可以声明变量severityLevel并将其传递给set_filter函数(使用boost的参考包装boost::ref()

// defined somewhere:
logging::trivial::severity_level severityLevel = logging::trivial::info;

// passed to set_filter() by reference
logging::core::get()->set_filter(
    logging::trivial::severity >= boost::ref(severityLevel));

// try out the logging:
BOOST_LOG_SEV(logger, warning) << "A warning severity message"; // not filtered out
severityLevel = logging::trivial::error;
BOOST_LOG_SEV(logger, warning) << "Another warning message"; // filtered out