我们在写程序的时候通常会希望将一些信息记录下来,方便我们进行日后的一些信息跟踪,错误排查等等。比如:我们在进行数据库操作的时候,我们通常希望知道现在是程序的哪一部分进行了数据库的操作,所以我们会记录下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. linux学习系列二

    vim是由vi发展而来,具有语法高亮显示,多视图编辑,代码折叠,支持插件等功能,vim成为了linux发行版本的标配. 1. vim工作模式 1. 普通模式:实现基本的光标移动和大量的快捷操作 2. ...

  2. Struts2的使用

    Struts2的核心类库 名称 说明 Struts2-core-2.3.4.jar 核心类库 Xwork-core-2.3.4.jar Xwork的核心类库 Ognl-3.0.5.jar Ognl表达 ...

  3. hash算法打散存储文件

    1.首先,为防止一个目录下面出现太多文件,所以使用hash算法打散存储 举例代码: int hashcode = filename.hashCode();//得到hashCode int dir1 = ...

  4. javascript笔记(一)

    使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: va ...

  5. java--xml文件读取(JDOM&DOM4J)

    1.JDOM解析 首先导入额外的jar包: Build Path:jdom-2.0.6.jar 准备工做获取到子节点的集合: package com.imooc_xml.jdom.text; impo ...

  6. javascript按位操作符操作以及用途

    所有的按位操作符的操作数都会被转成补码(two's complement)形式的有符号32位整数.正数的补码是自己本身,负数的补码是取反后加一,所以经过操作运算后的值是补码形式. 描述 按位与( AN ...

  7. linux命令学习笔记(20):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作, 这个时候exec的作用就显现出来了. exec解释: -exec 参数后面跟的是command ...

  8. PS 滤镜— —Twirl Filter

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...

  9. Fiddler + 海马模拟器转包教程

    Fiddler + 海马模拟器转包教程 转包用来做什么不说了, 整理一下步骤  1.安装Fiddler 下载地址 http://pan.baidu.com/s/18me0A 2.设置Fiddler: ...

  10. Xposed模块开发学习记录

    Xposed模块相关API可以参考在线文档: https://api.xposed.info/reference/packages.html     入门教程可以参考: https://github. ...