6

假设我有一个简单的 boost.logseverity_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 调用..?

4

1 回答 1

5

我会说你不能。测井系统分为三层(请参阅测井系统的设计概述)。

  • 您是数据收集层中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
于 2014-01-29T11:40:43.953 回答