现在的位置: 首页 > 综合 > 正文

Boost.log的应用

2013年08月27日 ⁄ 综合 ⁄ 共 1103字 ⁄ 字号 评论关闭

示例代码:

 

1. 几个概念

 

1.1 日志记录:

一个独立的消息包,这个消息包还不是实际写到日志里的消息,它只是一个候选的消息。

 

1.2 属性:

日志记录中的一个消息片。

 

1.3 属性值:

那就是上面所说的属性的值了,可以是各种数据类型。

 

1.4 日志槽(LOG SINK):

日志写向的目标,它要定义日志被写向什么地方,以及如何写。

 

1.5 日志源:

应用程序写日志时的入口,其实质是一个logger对象的实例。

 

1.6 日志过滤器:

决定日志记录是否要被记录的一组判断。

 

1.7 日志格式化:

决定日志记录输出的实际格式。

 

1.8 日志核心:

维护者日志源、日志槽、日志过滤器等之间的关系的一个全局中的实体。主要在初始化logging library时用到。

 

2. 框架结构

构架结构图

如图,

(1). 应用程序在图的右侧,通过一个或多个logger实例发送日志消息。

(2). 应用程序也可以出现在左侧,那就是一个日志的显示实例了。

(3). 一个日志记录的数据中会包括许多属性。属性基本上是一个函数,它的返回值就是属性值。比如时间不是一个函数(也是一个属性)。

(4). 有三种类型的属性集:全局的,特定线程的,特定源的。前两个是由logging core来维护的,所以不用再初始化。

(4.1). 全局属性集中的属性被连接到所以的日志对象上。

(4.2). 线程属性集中的属性会连接到把它注册到属性集时的那个线程。

(4.3). 源属性集由初始化日志的源来维护的,它会连接到一个特定的源上。

(4.4). 当一个源初始化日志对象的时候,它会从上述的三个属性集的所有属性中得到属性值。这些值会在将来处理。

如果在不同的属性集中有相同的属性名字的时候就会造成冲突,解决冲突的方法是全局属性集的优先级最低,源属性集的优先级最高。高优先级的属性会覆盖低优先级的属性。

(5). 当组合属性值的时候,logging core来决定一个属性是否要被送到sink中,这就是过滤。有两层过滤,首先应用的是全局中过滤,全局过滤用来快速的过滤掉那些不需要的日志记录。然后就是sink指定的过滤了。每个sink都有单独的过滤器。sink过滤器允许将一个日志记录定向到一个指定的sink。

(6). 如果一个日志记录至少通过了一个sink的话,它就可以用了。这时候就是日志消息格式化的时候了。格式化完成的日志消息和属性值一起被送到接收它们的sink中。

(7). 如上图所示,sink被分为前端和后端两个部分。这是为了抽象sink的通用功能,如过滤和线程同步。前端由日志库提供,用户不大可能再去实现它。而后端很可能是在日志库的外面,它来实现对日志记录的处理。如写文件,发送到网络等。日志库提供了大部分通常用到的后端程序。

 

 

抱歉!评论已关闭.