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

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

功能特征

高度可配置

速度非常快

线程和类型安全

跨平台

自定义日志模式

条件日志和偶然日志

性能跟踪

详细记录日志

中断处理

辅助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上给出一个示例代码:

1 #include "easylogging++.h"

2

3 INITIALIZE_EASYLOGGINGPP4

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

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

包含easylogging++.h头文件

使用宏 INITIALIZE_EASYLOGGINGPP初始化

使用宏 LOG(INFO) 开始日志记录

就是这么简单,只需三步,即可完成你的日志记录。这里需要特别说明的是,初始化宏 INITIALIZE_EASYLOGGINGPP 必须使用而且只能使用一次,否则将会产生编译错误。最好的放置这个初始化宏的地方是位于程序入口函数所在文件的顶部,紧跟在包含头文件的代码后面。

自定义日志

Easylogging++强大的自定义日志格式的能力是毋容置疑的,我们可以通过配置文件、配置参数、配置宏定义等方式来定义自己想要的日志格式。下面是一个利用配置文件来自定义日志的一个例子:

1 #include "easylogging++.h"

2

3 INITIALIZE_EASYLOGGINGPP4

5 int main(int argc, char**argv)6 {7 el::Configurations conf("my_log.conf");8 el::Loggers::reconfigureAllLoggers(conf);9

10 LOG(TRACE) << "***** trace log *****";11 LOG(DEBUG) << "***** debug log *****";12 LOG(ERROR) << "***** error log *****";13 LOG(WARNING) << "***** warning log *****";14 LOG(INFO) << "***** info log *****";15

16 system("pause");17 return 0;18 }

其中配置文件 my_log.conf 的内容如下:

1 *GLOBAL:2 ENABLED = true

3 TO_FILE = true

4 TO_STANDARD_OUTPUT = true

5 FORMAT = "[%level | %datetime] | %msg"

6 FILENAME = "log\\log_%datetime{%Y%M%d}.log"

7 MILLISECONDS_WIDTH = 3

8 PERFORMANCE_TRACKING = false

9 MAX_LOG_FILE_SIZE = 1048576

10 LOG_FLUSH_THRESHOLD = 0

11

12 *TRACE:13 FILENAME = "log\\trace_log_%datetime{%Y%M%d}.log"

14

15 *DEBUG:16 FILENAME = "log\\debug_log_%datetime{%Y%M%d}.log"

17

18 *FATAL:19 ENABLED = false

20

21 *ERROR:22 FILENAME = "log\\error_log_%datetime{%Y%M%d}.log"

23

24 *WARNING:25 FILENAME = "log\\warning_log_%datetime{%Y%M%d}.log"

26

27 *INFO:28 FILENAME = "log\\info_log_%datetime{%Y%M%d}.log"

29

30 *VERBOSE:31 ENABLED = false

通过这样的一个配置文件生成出来的日志会非常整齐,同时日志信息会保存到不同的文件中,而且还会输出到标准输出窗口。如下:

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

easylog 使用_Easyloggingpp的使用相关推荐

  1. ajax跨界表单,ajax使用jsonp解决跨域问题

    ubuntu环境配置 网络配置 主要文件:/etc/network/interfaces,这里是IP.网关.掩码等的一些配置: # This file describes the network in ...

  2. Google Glog使用

    Glog是Google的一个C++开源日志系统,轻巧灵活,入门简单,而且功能也比较完善. 安装 以下是官方的安装方法 git clone https://github.com/google/glog. ...

  3. xposed hook 构造函数_初识Xposed(上)

    " 前言:初学逆向 请多多指教" 总结: 1.学习了Xposed的正常hook,以及一些hook的时候需要注意的地方 Xposed介绍 - Android基于Linux,第一个启动 ...

  4. python导包顺序_2019-03-21 python导入包以及Python程序执行顺序理解

    http://codingpy.com/article/python-import-101/ https://segmentfault.com/a/1190000009842139 (一)Python ...

  5. proteus虚拟终端窗口不显示_Linux终端美化工具(ohmyzsh)

    先上一张自己终端的图片. https://ohmyz.sh/ 安装方法在最后 先明确几个概念 这些概念本身有着非常浓厚的历史气息,随着时代的发展,他们的含义也在发生改变,它们有些已经失去了最初的含义, ...

  6. 开源:如何优雅的实现一个操作日志组件

    1. 背景 日志几乎存在于所有系统中,开发调试日志的记录我们有log4j,logback等来实现,但对于要展示给用户看的日志,我并没有发现一个简单通用的实现方案.所以决定为之后的开发项目提供一个通用的 ...

  7. elk如何同步到es 方案靠谱吗_架构设计:微服务架构如何划分?这6个标准原则让你一目了然...

    互联网应用架构:专注编程教学,架构,JAVA,Python,微服务,机器学习等领域,欢迎关注,一起学习. 前几天在InfoQ看到一篇文章,讲微服务架构如何设计,结合笔者用3年多摸索出来的经验,看了之后 ...

  8. ue4 设置intellisence_UE4的配置界面写入

    UE4的Config系统使用起来很方便,但是如果要让制作出来的插件/项目更方便的让其他人设置,就需要将其写到编辑器的配置列表中. 当前使用的UE4版本为4.18.0 P4. 这里的内容是以Conifg ...

  9. 好用的API接口测试工具有什么推荐吗?

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 这篇文章,推荐一些还不错的工具,具体工具使用,是没有任何门槛:搜索引擎,去搜索工具名,有 ...

最新文章

  1. 借助JRebel使Tomcat支持热部署
  2. 编写批处理文件-------基础
  3. tomcat java环境配置
  4. Linux系统:Centos7下搭建PostgreSQL关系型数据库
  5. LoadRunner截取字符串操作
  6. 2018年6月3号(线段树(3))
  7. 原型设计Axure下载安装
  8. Fresco · 基本使用及Gif和webP播放及循环播放详解
  9. Java 音频处理技术
  10. 微信小程序在线考试项目开发-注册登录功能
  11. xposed框架安装使用步骤
  12. 初入职场如何时间管理课程总结-B站
  13. vue中刷新页面定位导航栏(解决刷新页面导航栏自动定位到首页的问题+路由传参)
  14. 仿美剧天蝎计划 scorpion 12集微型千斤顶机械装置
  15. 图片base64转存本地url
  16. 如何把小米手机便签内容云同步到iPhone XS上?
  17. 蓝桥杯Java必备基础知识总结大全【3W字】持续更新中
  18. 大数据杂谈篇:认识大数据生态(个人心得分享)
  19. 10条必知的网页导航菜单设计原则
  20. 华容道 java swing

热门文章

  1. leetcode 224. Basic Calculator | 224. 基本计算器(中缀表达式求值)
  2. leetcode 611. Valid Triangle Number | 611. 有效三角形的个数(Java)
  3. leetcode 257. 二叉树的所有路径(Java版)
  4. 【EasyUI】Tree中自定义在节点前是否显示checkbox
  5. netty系列之:netty中的ByteBuf详解
  6. LevelDB源码解读
  7. Ubuntu常用服务器环境搭建——MySQL篇
  8. 山谷序列C语言,通达信 山谷独创 主升黑马主图源码
  9. window10安装python2.7_Windows10-python2.7安
  10. gradle 的 依赖管理(八)