Log


boost log库框架图


log-LMLPHP


boost log库组件


1. source

  ① Basic Loggers

基础日志。

使用需要包含头文件:#include >

所在命名空间 namespace boost::log::sources

包含两个日志类:loggerlogger_mt,后者为线程安全版本。

日志输入宏:BOOST_LOG

例如:

点击(此处)折叠或打开

  1. boost::log::sources:logger_mt lg;
  2. BOOST_LOG(lg) << “record”;
  ② Logger with severity level support

支持严重等级的日志。自动注册了一个名为“Severity”的属性。

使用须包含头文件: #include 

 #include

所在命名空间: namespace boost::log::sources

包含两个日志类模板:severity_loggerseverity_logger_mt,后者为线程安全版本 实例化类模板时需要一个 int类型的模板参数,通常定义为枚举类型,该枚举类 型定义了日志严重等级。boost.log定义了一个严重等级枚举类型severity_level,所在命名空间为 boost::trivial

日志输入宏:BOOST_LOG_SEV

例如:

点击(此处)折叠或打开

  1. boost::log::sources::severity_logger_mt<boost::trivial::severity_level> lg;
  2. BOOST_LOG_SEV(lg, boost::trivial::severity_level::warning> << “record”;
  ③ Logger with channel support

关联通道的日志。自动注册了一个名为Channel”的属性。

使用须包含头文件: #include
              #include  。

所在命名空间 namespace boost::log::sources

包含两个日志类模板:channel_loggerchannel_logger_mt,后者为线程安全版本

日志输入宏:BOOST_LOG_CHANNEL

  ④ Logger with exception handling support

支持异常处理的日志。

使用须包含头文件: #include

所在命名空间: namespace boost::log::sources

  ⑤ Logger with mixed features

混合特征的日志。同时支持严重等级和通道的日志。

使用须包含头文件: #include

所在命名空间: namespace boost::log::sources

包含两个日志类模板:severity_channel_loggerseverity_channel_logger_mt,后者 为线程安全版本。

日志输入宏:BOOST_LOG_SEV。
⑥ Global storage for loggers

2. record

日志记录对象,

3. core

boost.log 中心模块,广泛应用单例,获取实例方法:boost::log::core::get()

包含头文件:#include

命名空间:namespace boost::log::core

值得说明的是:boost::log::core的所有方法都是线程安全的。

core提供如下工具:

① 全局和指定线程的属性集

② 全局日志过滤

③ 使用sink过滤器传递日志到sink

④ 异常处理全局钩子

⑤ logger日志输入进入点

⑥ flush同步写入日志
  
1. Attribute sets

① add_global_attribute():   添加全局属性。

② remove_global_attribute(): 删除全局属性。

③ add_thread_attribute(): 添加线程属性。

④ remove_thread_attribute(): 删除线程属性
2. Global filtering

① set_filter(): 设置过滤器。
3. 
Sink Management

① add_sink(): 添加sink。

② remove_sink(): 删除sink。
4. Exception handling

① set_exception_handler(): 设置异常处理句柄。
5. 
Feeding log records

① open_record(): 获取一条日志。

② push_record(): 提交一条由open_record返回获得的日志。

4. sink

  ① frontend
    sink frontendsink的一部分,继承自sink类。承接来自boost::log::core 日志记录,并传输给对应连接的sink backend处理,sink frontend不决定日志 处理规则,日志处理规则由sink backend决定。
    所有sink frontend都必须提供如下3种服务:
         Filtering(日志过滤):              实现接口:set_filter()
            Formatting(日志格式化):            实现接口: set_formatter()
            Exception Handling(异常处理):
    1. Unlocked sink frontend
     无锁sink frontend。继承自unlocked_sink,不提供线程同步,但是设置过滤器是线程安全的,这意味着你可以在其他线程处理日志的同时设置过滤器。实例化类模板的sink backend不要求提供线程同步服务。 
     
包含头文件:#include
     
所在命名空间:namespace boost::log::sink
    2. Synchronous sink frontend

同步sink frontend。继承自synchronous_sink,提供线程同步。实例化类模板的sink backend必须提供线程同步服务。

包含头文件: #include 

所在命名空间:namespace boost::log::sinks

    3. Asynchronous sink frontend

异步sink_frontend。继承自asynchronous_sink。
② backend
 1. Text stream backend
 2. Text file backend
 3. Text multi-file backend
 4. Syslog backend
 5. Windows debugger output backend
 6. Windows event log backend




@boost笔记系列总结自罗剑锋的《Boost库完全开发指南》第三版、Boost 1.61.0 Library Documentation、boost 1.51 源码。






10-01 03:15