【问题标题】:Get severity of boost.log logger..?获取 boost.log 记录器的严重性..?
【发布时间】:2014-01-29 07:17:03
【问题描述】:

假设我有一个简单的 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;

如何以编程方式检查严重性?
IE。像logger.getSeverity()..?

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

【问题讨论】:

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


    【解决方案1】:

    我会说你不能。日志系统分为三层(见日志系统的Design overview)。

    • 您的severity_logger 是一个源记录器,在数据收集层中具有severity_level 属性。

    • 您使用logging::core::get()-&gt;set_filter(...) 设置的严重性是一个函数对象,它是为日志记录核心设置的。传递给记录器的所有消息都将被该函数对象过滤,然后再传递给接收器。

    所以,实际上没有severityseverity_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
    

    【讨论】:

    • 嗯.. 很有趣。因此,我必须将通过 set_filter() 传递给 boost.log 的任何内容存储在我的包装类中
    • 这取决于你想要达到的目标。过滤器函数对象也可以使用您自己的函数进行初始化,该函数的行为可能取决于某个变量(请参阅类 boost::logging::filter)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2013-04-25
    • 2012-01-04
    • 2016-03-25
    • 2020-01-29
    • 2019-11-10
    相关资源
    最近更新 更多