Boost Log库使用介绍

本文介绍了Boost.Log库的使用,包括框架的核心概念:日志记录、属性、日志槽、日志源、日志过滤器和日志格式。强调了其优点,如流式输出、支持多种后端Sink、文件管理,以及缺点,如编译复杂性和模板编程带来的问题。并给出了简单的使用示例。
摘要由CSDN通过智能技术生成

说明:文章内容为学习Boost Log 文档提炼记录,核心内容来自官方文档。
Boost.Log官方文档

Boost.Log 简介

Boost被称为“准”标准库,相当于STL的延续和扩充,设计和STL比较接近,大量利用了泛型模板让复用达到最大化,因此在项目中可作为高质量的第三方库使用。Log库经过多次review该进, 终于在1.54版本才开始正式发布,根据其官方说明,Log 库提供了使用简单、扩展性好、性能优良的组件,因此在项目中选用log 库时可将Boost.Log 纳入候选。 但使用也需要注意:log和其它部分库类似在使用时需要编译,并且对其他库的依赖很厉害,需要相关Boost.Filesystem,Boost.System,Boost.DateTime,Boost.Thread,Boost.Regex 库的支持。

Boost.Log 框架介绍

  • Boost.Log框架中核心概念

日志记录(Record):一个独立的消息包,该消息包不是实际写到日志里的消息,而只是一个候选的消息。
属性及属性值(Attribute):属性为日志记录中的一个消息片,它的值可以是各种数据类型。
日志槽(Sink):日志写向的目标,它要定义日志被写向什么地方,以及如何写。
日志源(Source):应用程序写日志时的入口,其实质是一个logger对象的实例。
日志过滤器(Filter):决定日志记录是否要被记录的一组判断。
日志格式(Formatter):决定日志记录输出的实际格式。
日志核心(Core):维护者日志源、日志槽、日志过滤器等之间的关系的一个全局中的实体,在初始化logging library时用到。

  • Boost.Log 框架分析

Boost.Log框架图
(图片选择Boost.Log官方文档)

如上框架简图所示,Boost.Log 主要由日志源,全局库,sink组成等组成。

  1. 应用程序(左侧)通过一个或多个logger实例发送日志消息。
  2. 应用程序也可以出现在左侧,那就是一个日志的显示实例了。
  3. 一个日志记录的数据中会包括许多属性,属性基本上是一个函数,它的返回值就是属性值。有三种类型的属性集:全局的,特定线程的,特定源的。
    – 全局属性集中的属性被连接到所有日志对象上。
    – 线程属性集中的属性会连接到把它注册到属性集时的那个线程。
    – 源属性集由初始化日志的源来维护的,它会连接到一个特定的源上。
    当一个源初始化日志对象的时候,它会从上述的三个属性集的所有属性中得到属性值。如果发生冲突,则依据优先级顺序进行覆盖, 原则为:源属性集>线程属性集>全局属性集。
  4. 当组合属性值的时候,logging core来决定一个属性是否要被送到sink中,即过滤。共有两层:先全局过滤,用来快速的过滤掉那些不需要的日志记录,然后就是sink指定的过滤了。每个sink有单独的过滤器,该过滤器允许将一个日志记录定向到一个指定的sink。
  5. 当一条日志记录至少通过了一个sink,接下来该日志消息将被格式化,格式化完成的日志消息和属性值一起被送到接收它们的sink中。
  6. 图中Sink被分为前端和后端两部分是为了抽象sink的通用功能,例如过滤和线程同步。前端由日志库提供,用户不大可能再去实现它,后端在日志库的外面,用来实现对日志记录的处理,如写文件,发送到网络等。Boost.Log库提供了大部分常用的后端Sink。

因此,根据上述说明,要将日志放进后端Sink(File/Socket/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值