zoukankan      html  css  js  c++  java
  • Boost Log : Trivial logging with filters

    Trivial logging with filters

    虽然严重性级别有利于提供更多的信息,但通常您会希望应用过滤器,只将重要的记录输出,而忽略其余的记录。通过在库核心中设置一个全局过滤器,很容易做到这一点,如下所示:

    #include <boost/log/core.hpp>
    #include <boost/log/trivial.hpp>
    #include <boost/log/expressions.hpp>
    
    namespace logging = boost::log;
    
    void init()
    {
        logging::core::get()->set_filter
        (
            logging::trivial::severity >= logging::trivial::info
        );
    }
    
    int main(int, char*[])
    {
        init();
    
        BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
        BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
        BOOST_LOG_TRIVIAL(info) << "An informational severity message";
        BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
        BOOST_LOG_TRIVIAL(error) << "An error severity message";
        BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
    
        return 0;
    }
    

    现在,如果我们运行这个代码示例,前两个日志记录将被忽略,而剩下的四个将被传递到控制台。

    重要提示
    记住,stream表达式只在日志记录通过过滤器时才执行。不要在stream表达式中做业务关相关的调用,因为如果这些日志记录被过滤掉,这些调用可能不会被执行。

    必须对过滤器设置表达式说几句。由于我们正在设置一个全局过滤器,所以我们必须获得 logging core 实例。这就是 logging:core::get() 所做的,它返回一个指向核心单例的指针。logging core 的 set_filter 方法设置全局过滤函数。本例中的过滤器被构建为 Boost.Phoenix lambda 表达式。在我们的例子中,这个表达式由一个逻辑谓词组成,其左边的参数是一个占位符,用于描述要检查的属性,右边的参数是要检查的值。severity 关键字是由库所提供的占位符。此占位符标识模板表达式中的 severity 属性值;这个值应该有名称 “Severity” 和类型 severity_level。 在 trivial logging 中该属性是由库自动提供的;用户只需在 logging 语句中提供其值。占位符与关系操作符一起创建一个函数对象,logging core 将调用该对象来过滤 log records。因此,只有严重级别不低于info的日志记录才能通过过滤器,并最终到达控制台。

    将像这样的逻辑谓词相互组合,可以构建更复杂的过滤器,甚至可以自定义作为过滤器的函数(包括c++ 11 lambda函数)。我们将在后面的章节节中再次说明过滤器。

  • 相关阅读:
    iframe框架与Ajax异步操作,一同出现时iframe内容的url内容会弹出的解决办法。
    IE 无法显示JPG格式图片
    MSN9在win2003下的安装
    TED 中文视频收集
    Google wave 发送中.....
    IE下生成唯一ID的办法。
    Oracle 数据库常用操作语句
    DataTable 2 Sql Table
    sqlserver 2005 查找对象引用或者依赖的存储过程。
    大连地铁规划与效果图摘自鸿霖博客 松鹤的日志 网易博客
  • 原文地址:https://www.cnblogs.com/kohlrabi/p/9142812.html
Copyright © 2011-2022 走看看