对于有开发经验的程序员来说,记录程序执行日志是一件必不可少的事情。通过查看和分析日志信息,不仅可以有效地帮助我们调试程序,而且当程序正式发布运行之后,更是可以帮助我们快速、准确地定位问题。在现在这个开源的年代,并不需要我们自己去写一套日志库,开源的版本已经有很多了。然而遗憾的是,在目前开源的C++日志库中,并没有一个在使用份额上占绝对优势的,我自己之前用过log4cplusglog,这两个库都比较成熟了,而且网上教程也很多,所以一直都很喜欢使用这两个日志库。

前段时间,在GitHub上我偶然看到了另外一个开源的C++日志库,当时还只是粗略地研究了一下,结果竟然让我爱不释手,它就是Easylogging++。和log4cplus和glog相比,Easylogging++最大的特点就是它只有一个头文件,并且无需任何外部依赖,我从来没有见过哪一个日志库可以做到如此轻量而且还能兼顾性能的。除此之外,Easylogging++使用起来非常简单,同时还支持文件配置,提供了强大的自定义日志格式的能力,还提供对第三方库,STL容器的支持。面对如此炫酷的开源日志,怎么能不去学习学习!!!

Easylogging++项目在GitHub的开源地址:https://github.com/easylogging/easyloggingpp

功能特征

  • 高度可配置
  • 速度非常快
  • 线程和类型安全
  • 跨平台
  • 自定义日志模式
  • 条件日志和偶然日志
  • 性能跟踪
  • 详细记录日志
  • 中断处理
  • 辅助CHECK宏
  • STL 日志
  • 第三方库日志(比如Qt, boost, wxWidgets)
  • 可扩展性
  • 支持Debug功能
  • 系统日志记录
  • perror风格日志
  • C++流操作符风格日志
  • C 语言printf风格日志
  • ……
 
版本说明
 

写这篇文章时,最新的 Easylogging++ 版本是V9.80,如果编译器不支持C++11的话,是无法编译的。对于Visual Studio系列来说,必须是VS2012或以上版本才行。如果还停留在VS2010、VS2008,VS2005的小伙伴,可以考虑使用EasyLogging++ V8.91版本。需要注意的是,不同的版本在使用方法和功能支持上都会有所差异。特别指出,本系列中所有的学习记录,只适用于 Easylogging++ 版本V9.80。另外,在本系列文章中出现的所有演示代码都是在 64Bit Windows 7 系统下使用 Visual Studio 2013 编译测试的。

快速使用

正如前面所说,Easylogging++使用起来非常简单,简单到什么地步呢?下面是GitHub上给出一个示例代码:

#include "easylogging++.h"  

INITIALIZE_EASYLOGGINGPP  

int main(int argv, char* argc[]) {
LOG(INFO) << "My first info log using default logger";
return ;
}

示例代码只有短短几行,每行代码的作用也一目了然:

  • 包含easylogging++.h头文件
  • 使用宏 INITIALIZE_EASYLOGGINGPP 初始化
  • 使用宏 LOG(INFO) 开始日志记录
就是这么简单,只需三步,即可完成你的日志记录。这里需要特别说明的是,初始化宏 INITIALIZE_EASYLOGGINGPP 必须使用而且只能使用一次,否则将会产生编译错误。最好的放置这个初始化宏的地方是位于程序入口函数所在文件的顶部,紧跟在包含头文件的代码后面。
 
自定义日志
 
Easylogging++强大的自定义日志格式的能力是毋容置疑的,我们可以通过配置文件、配置参数、配置宏定义等方式来定义自己想要的日志格式。下面是一个利用配置文件来自定义日志的一个例子: 
#include "easylogging++.h"  

INITIALIZE_EASYLOGGINGPP  

int main(int argc, char** argv)
{
el::Configurations conf("my_log.conf");
el::Loggers::reconfigureAllLoggers(conf); LOG(TRACE) << "***** trace log *****";
LOG(DEBUG) << "***** debug log *****";
LOG(ERROR) << "***** error log *****";
LOG(WARNING) << "***** warning log *****";
LOG(INFO) << "***** info log *****"; system("pause");
return ;
}
其中配置文件 my_log.conf 的内容如下:
通过这样的一个配置文件生成出来的日志会非常整齐,同时日志信息会保存到不同的文件中,而且还会输出到标准输出窗口。如下:
 

看到这里,相信对于那些以前用过类似log4cplus或者glog等日志库的小伙伴来说,其实已经完全可以上手使用Easylogging++了,剩下的部分都是一些细节或者是Easylogging++扩展性的功能介绍,这些会在后面的学习中逐渐加以记录。如果有和我一样看到并且就喜欢上Easylogging++的朋友,就让我们一起来深入了解Easylogging++并把它应用到实际的开发之中吧。

参考网址:https://blog.csdn.net/xie1xiao1jun/article/details/54572803

EasyLogging++学习笔记(1)—— 简要介绍的更多相关文章

  1. HTML+CSS学习笔记(1) - Html介绍

    HTML+CSS学习笔记(1) - Html介绍 1.代码初体验,制作我的第一个网页 <!DOCTYPE HTML> <html> <head> <meta ...

  2. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  3. cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例

    cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...

  4. InterSystems Ensemble学习笔记(一) Ensemble介绍及安装

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  5. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  6. Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用

    Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...

  7. MeayunDB学习笔记(一) MeayunDB介绍及安装

    系列目录   MeayunDB介绍-高性能分布式内存数据库 MeayunDB学习笔记(一)MeayunDB介绍及安装 MeayunDB学习笔记(二)批量导入数据 MeayunDB学习笔记(三)索引应用 ...

  8. ActiveMQ学习教程/1.简要介绍与安装

    ActiveMQ学习教程(一)——简要介绍与安装 一.名词: 1.JMS:即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的 ...

  9. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

随机推荐

  1. TeX教程

    转自 [抢工作向]一个更适合玩物理的同学的论坛TeX教程 1. 基础知识 如何在你的帖子里插入一个\(\TeX\)环境来写公式呢?答案其实很简单,对于不同的要求,我们有两种方法. 第一种只需要在\(\ ...

  2. SQL语句中的HAVING关键字

    sql中的having语句是在使用group by的时候使用的. 通常where语句是在group by之前做数据筛选的,而having语句是对group by之后的结果进行筛选的. 例如: 从商品销 ...

  3. 排序之希尔排序(JS)

    希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该 ...

  4. StoneTab标签页CAD插件 3.0.0

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  5. c# 爬虫和组件HtmlAgilityPack处理html

    测试当前爬虫的User-Agent:http://www.whatismyuseragent.net/ 大佬的博客地址:https://www.cnblogs.com/jjg0519/p/670274 ...

  6. ECMAScript中的原型继承

    //ECMAScript中的原型继承//ECMAScript中的继承主要是依靠原型链实现的.(关于原型链的介绍,详见<高三>6.3.1章节 P162) //本文示例主要为了说明SubTyp ...

  7. JS基础_对象的方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. sketch最强切图工具Sketch Measure

    https://www.inpandora.com/sketch-measure.html https://www.jianshu.com/p/c11ae88e6b1d

  9. JS的一些简单基础运算题

    1.输入一个四位数,在控制台分别显示个位,十位,百位,千位的数值 var a = prompt("请输入一个四位数的正整数"); var b = parseInt(a/1000); ...

  10. ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)

    一.什么是ActiveMQ 度娘给出的定义: Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件:由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Jav ...