对于有开发经验的程序员来说,记录程序执行日志是一件必不可少的事情。通过查看和分析日志信息,不仅可以有效地帮助我们调试程序,而且当程序正式发布运行之后,更是可以帮助我们快速、准确地定位问题。在现在这个开源的年代,并不需要我们自己去写一套日志库,开源的版本已经有很多了。然而遗憾的是,在目前开源的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. Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"

    今天使用ajax上传文件时,出现了错误.数据传输的方式是通过定义formData完成的,提交的文件对象也设置为dom对象,但是还是不能发送请求.F12看到后台报了个错误:Uncaught TypeEr ...

  2. 20190716-Python网络数据采集/第 2 章 复杂HTML解析

    # P29/9# 解析,要考虑到可持续性问题,对方反爬修改后,仍继续有效,方为优秀代码# 解析一个目标网页前,需要做到以下几点:(1)明确目标内容:(2)寻找“打印此页”的链接,或查看网站有无HTML ...

  3. 一个MySQL JDBC驱动bug引起的血案

    1.1      问题背景 公司是做电商系统的,整个系统搭建在华为云上.系统设计的时候,考虑到后续的用户和订单数量比较大,需要使用一些大数据库的组件.关系型数据库这块,考虑到后续数据量的快速增长,不是 ...

  4. 使用python django快速搭建微信公众号后台

    前言 使用python语言,django web框架,以及wechatpy,快速完成微信公众号后台服务的简易搭建,做记录于此. wechatpy是一个python的微信公众平台sdk,封装了被动消息和 ...

  5. Wannafly挑战赛22

    B. 字符路径 给一个含n个点m条边的有向无环图(允许重边,点用1到n的整数表示),每条边上有一个字符,问图上有几条路径满足路径上经过的边上的字符组成的的字符串去掉空格后以大写字母开头,句号 '.' ...

  6. [NOIP10.4模拟赛]2.y题解--折半搜索+状压计数

    题目链接: 咕 闲扯: 这题暴力分似乎挺多,但是一些奇奇怪怪的细节没注意RE了,还是太菜了 分析: 首先我们考虑最naiive的状压DP ,\(f[u][v][state]\)表示u开头,v结尾是否存 ...

  7. vue学习(7)-路由抽离

    cnpm i vue-router -S

  8. Category VS Extension 原理详解

    (一)Category 1.什么是Category? category是Objective-C 2.0之后添加的语言特性,别人口中的分类.类别其实都是指的category.category的主要作用是 ...

  9. ngnix反向代理后获取用户真实ip及https配置

    server {listen 80;listen 802;server_name test111.xxxx.com 118.24.122.101; gzip on;gzip_min_length 10 ...

  10. Image Processing and Computer Vision_Review:A survey of recent advances in visual feature detection(Author's Accepted Manuscript)——2014.08

    翻译 一项关于视觉特征检测的最新进展概述(作者已被接受的手稿) 和A survey of recent advances in visual feature detection——2014.08内容相 ...