boost.log(二)过滤

日志过滤

严重级别可以使日志信息更加翔实,但通常也会成为筛选器用来过滤日志记录的工具。在Log库的core里面可以通过设置全局过滤器很容易地做到日志过滤,就像下面一样:

  1. #include <iostream>
  2. #include <boost/log/core.hpp>
  3. #include <boost/log/trivial.hpp>
  4. #include <boost/log/expressions.hpp>
  5. void init()
  6. {
  7. boost::log::core::get()->set_filter(boost::log::trivial::severity >= boost::log::trivial::info);
  8. }
  9. int main(int, char*[])
  10. {
  11. init();
  12. BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
  13. BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
  14. BOOST_LOG_TRIVIAL(info) << "An informational severity message";
  15. BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
  16. BOOST_LOG_TRIVIAL(error) << "An error severity message";
  17. BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
  18. system("pause");
  19. return 0;
  20. }

现在运行代码后前两个日志将被忽略,而后面四个日志会在控制台输出。这是因为我们筛选了严重级别大于boost::log::trivial::info的日志。

【重要】请记住,流表达式只会执行那些通过了过滤的结果。绝对不要在流表达式上指定关键业务的调用,因为如果日志被过滤掉了,这些调用必定不能被调用。

在调用set_filter函数时,其左侧的参数是一个占位符,描述要检查的属性。右侧的参数是要对照检查的值。boost::log::trivial::severity关键字是由Log库提供的占位符,此占位符表示严重级别的属性值。右侧的参数是Log库的枚举类型severity_level,第一节中有提到。然后表达式通过>=运算符过滤掉了严重等级小于boost::log::trivial::info的日志信息,最终将结果输出到控制台上。你也可以构建更复杂的过滤器,结合逻辑判断相互搭配,甚至还可以定义自己的过滤函数。

来自为知笔记(Wiz)

时间: 2024-10-08 15:47:35

boost.log(二)过滤的相关文章

boost.log(七)再谈过滤

再谈过滤 我们已经在前面的章节接触过滤,但只是浅尝辄止.我们现在能够添加日志记录并设置接收器的属性,我们需要建立复杂的过滤功能.让我们看下这个例子: #include <string> #include <fstream> #include <iomanip> #include <boost/log/core.hpp> #include <boost/smart_ptr.hpp> #include <boost/log/sinks.hpp&

Boost Log 基本用法

Boost Log 基本用法 flyfish 2014-11-5 根据boost提供的代码示例,学习Boost Log 的基本用法 前提 boost版本boost_1_56_0 示例代码文件夹 boost_1_56_0\libs\log\example\basic_usage 使用的单词很形象,整个过程就像流水一样 假设要输出的日志比作水 水                     (Hello, World!) 水槽                 (sink) 流向哪里        (co

boost.log要点笔记

常用简写: namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = boost::log::expressions; namespace sinks = boost::log::sinks; namespace attrs = boost::log::attributes; namespace keywords = boost::log::keywords; 要点: 结构图要牢记在

Golang中使用log(二):Golang 标准库log的实现

前一篇文章我们看到了Golang标准库中log模块的使用,那么它是如何实现的呢?下面我从log.Logger开始逐步分析其实现. 其源码可以参考官方地址 1.Logger结构 首先来看下类型Logger的定义: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write at beginning of each

Boost log 简单使用

Boost log 简单使用 flyfish 2014-11-8 该示例是在VC2010 MFC Unicode环境下使用 内容包括 1 启动关闭日志 2 设置日志存储路径 3 设置输出日志等级 4 日志是否立即写入文件 5 设置单个文件的大小 6 设置磁盘最小可利用空间 Logger.h #pragma once #include <cassert> #include <iostream> #include <fstream> #include <boost/l

boost.log(九) 配置文件

前面几节中描述了Boost.Log 的基础知识,对Boost.Log 库的操作我们都是在C++代码中进行中,这样就会有一些不便的地方.比如说我们想要更改一下输出格式或者过滤条件,都必须对C++代码进行更改,并且还得编译一次(感觉编译时间还有点长).其实Boost.Log 里面已经为这个问题提供了一种解决方案,就是通过配置文件来初始化Boost.Log 库,C++这边的代码也比较简单,就是这样的: std::ifstream settings("settings.txt"); if (!

boost.log(四)记录器

记录器对象 在上个章节的接收器部分我们已经知道了boost.log库是如何存储日志的,现在是时候去尝试记录日志了.首先我们要创建一个记录器,这非常简单: boost::log::sources::logger lg; [注意]boost.log库在后台给记录器(logger)提供了写的功能,就如同BOOST_LOG_TRIVIAL 宏一样. 与接收器不同,记录器无须在任何地方注册,因为它们是直接与日志记录核心进行交互的.此外请注意boost.log库提供了两个版本的记录器: 线程安全的(logg

boost.log(一)打印日志

打印输出 对于那些不想阅读手册,只需要一个简单的工具用于日志记录的人.你可以直接在控制台中输出日志信息,首先你需要包含头文件boost/log/trivial.hpp,然后编写下面的代码: #include <iostream> #include <boost/log/trivial.hpp> int main(int, char*[]) { BOOST_LOG_TRIVIAL(trace) << "A trace severity message"

boost.log(三)接收器

设置接收器 BOOST_LOG_TRIVIAL不能提供足够的灵活性.例如,有时可能需要更复杂的逻辑来处理日志,而不是简单地将其打印在控制台上.为了定制这一点,你必须构造记录接收器,并在boost.log库core里面注册.这通常只需要你在应用程序启动的地方注册一次就够了. [注意]在前面的章节中我们没有初始化任何的接收器,因为boost.log库在没有初始化任何接收器的情况下会使用一个默认的接收器,这就是为什么我们能够在控制台中看到日志的输出结果.如果你设置了自定义的接收器,那么默认的接收器将会