我们在写程序的时候通常会希望将一些信息记录下来,方便我们进行日后的一些信息跟踪,错误排查等等。比如:我们在进行数据库操作的时候,我们通常希望知道现在是程序的哪一部分进行了数据库的操作,所以我们会记录下threadid + sql这样的日志。但是通常我们都不情愿自己进行log的封装,这个时候我们就会想到使用第三方的库,今天我们就说一下c++中的第三方库----log4cpp,写过java程序的同学们都长都会使用log4j这样一个日志系统,其实log4cpp可以说是log4j对c++的一个扩展。

  下面我们就学习一下log4cpp,首先说一下log4cpp的几个大的组件,layouts,appenders,categories三大组件,大致的过程是这样的,layouts负责进行日志输出格式的限制,appenders负责进行数据输出位置的限制,categories负责进行真正的日志处理,至于他们的详细功能我们稍后会逐一详细叙述。

  1.   layouts: 负责进行输出日志格式的限制,其中包含四个主要的类: Layout,BasicLayout,PatternLayout,SimpleLayout四个类,这四个类的UML图如下:Layout是一个顶层的抽象类,其他类都继承子这个类。
    • SimpleLayout: 以“优先级(priority) - 日志信息”格式显示,由于显示的信息过于简单,所以通常都不愿意使用这个模式。 
    • BasicLayout: 以“时间戳+优先级+categoriesName+“:”+Info来表示日志的相关信息。
    • PatternLayout:可以使用类似于c语言的模式进行相关的参数设置,具体如下:
      • %c: 指的是categories的name
      • %d:指的是时间,但是可以具体制定时间的格式,制定的模式例如这样: %d{%H:%M:%S,%l}
      • %m: 指的是日志的消息
      • %n: 指的是换行符,会根据平台的不同,使用不同的格式,对用户透明
      • %p: 优先级等等
      • 具体情况可以参见log4cpp
      • 设置的函数是Layout.setConversionPattern()

  2.  Appender: 我们设置的layout只是相当于设置了日志的模式,但是我们要将使用制定模式的日志打印到什么地方,那就需要用到Appender,下面我们简单的介绍一下Appender的几种类型:

      • FileAppender: 用于将日志输出到文件中      

C++开源库(一) ----log4cpp详解的更多相关文章

  1. C++开源库(一) ----libConfig详解

    博主天生患有蛋疼疾病,写博不易,转载注明出处http://www.cnblogs.com/liboBlog/,谢谢! 在写程序的时候必不可少的一个部分就是conf文件的解析,但是如果自己解析的话会比较 ...

  2. 全网最全的Windows下Python2 / Python3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)

    不多说,直接上干货! 建议,你用Anaconda2或Anaconda3. 见 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库( ...

  3. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  4. 【Solr】索引库查询界面详解

    目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...

  5. c/c++ 标准库 插入迭代器 详解

    标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的. 例如下面的代码就是错误的: list ...

  6. c/c++ 标准库 bind 函数 详解

    标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...

  7. 【Linux开发】Linux下jpeglib库的安装详解

    Linux下jpeglib库的安装详解 首先要下载所需的库压缩包:jpegsrc.v6b.tar.gz或 jpegsrc.v8b.tar.gz 然后将下载的压缩包随便放在和解压到你喜欢的地方. # t ...

  8. App域名劫持之DNS高可用 - 开源版HttpDNS方案详解(转)

      http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209805123&idx=1&sn=ced8d67c3e2cc3 ...

  9. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)

    不多说,直接上干货!  Anaconda2 里 PS C:\Anaconda2\Scripts> PS C:\Anaconda2\Scripts> pip.exe install itch ...

随机推荐

  1. 算法(Algorithms)第4版 练习 1.5.22

    package com.qiusongde; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.StdStats; ...

  2. 大话设计模式--适配器模式 Adapter -- C++实现实例

    1.适配器模式: 将一个类的接口转换为客户希望的另一个接口,使得原来由于接口不能一起工作的那些类一起工作. 适配器模式一般用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 适配器模式分 ...

  3. AngularJs 相应回车事件

    最近做项目,要用到AngularJs,之前也有用过一点点,但仅限于数据的绑定,这次项目要整个前端需要使用这个框架,可能是不熟悉的原因,感觉这代码搞起来非常的不便利,:现总结一个响应回车事件: < ...

  4. js 判断滚动条的滚动方向

    以下代码实现判断页面的滚动条的滚动方向: var sign = 80;//定义默认的向上滚与向下滚的边界 window.onscroll = window.onresize = function(){ ...

  5. php把字符串指定字符分割成数组

    <?php $str="1|2|3|4|5|"; $var=explode("|",$str); print_r($var); ?> $var=ex ...

  6. getline()函数详解 (2013-03-26 17:19:58)

     学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”.书上给的程序如下: int main() {   ...

  7. wiredtiger存储引擎介绍——本质就是LSM,当然里面也可以包含btree和列存储

    见:http://www.slideshare.net/profyclub_ru/4-understanding-and-tuning-wired-tiger-the-new-high-perform ...

  8. H264 NALU 使用PS封装 RTP发送

    最近由于项目平台需求,要将H264 NALU封装为PS再用RTP发送,PS封装按照ISO DEC-13818-1标准.一个PS包包含PS Header, PES Header, PS system h ...

  9. rsync 介绍和参数说明

    Rsync 介绍: 我们经常需要在不同目录或者服务器之间做文件同步和更新,Linux提供了很多内置命令可以使用比如scp等等,但是今天我们介绍一个更加强大的工具rsync.rsync 命令是一个远程同 ...

  10. redhat 安装lamp

    安装Apache yum install httpd 安装MySql yum install mysql mysql-server 安装php yum install php 安装php的mysql模 ...