日志库EasyLogging++学习系列(1)—— 简要介绍

日志库EasyLogging++学习系列(1)—— 简要介绍

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

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

  • 包含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 0;
}

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

 

* GLOBAL:
    ENABLED                 =   true
    TO_FILE                 =   true
    TO_STANDARD_OUTPUT      =   true
    FORMAT                  =   "[%level | %datetime] | %msg"
    FILENAME                =   "log\\log_%datetime{%Y%M%d}.log"
    MILLISECONDS_WIDTH      =   3
    PERFORMANCE_TRACKING    =   false
    MAX_LOG_FILE_SIZE       =   1048576
    LOG_FLUSH_THRESHOLD     =   0
	
* TRACE:
    FILENAME                =   "log\\trace_log_%datetime{%Y%M%d}.log"
	
* DEBUG:
    FILENAME                =   "log\\debug_log_%datetime{%Y%M%d}.log"
	
* FATAL:
    ENABLED                 =   false
	
* ERROR:
    FILENAME                =   "log\\error_log_%datetime{%Y%M%d}.log"
	
* WARNING:
    FILENAME                =   "log\\warning_log_%datetime{%Y%M%d}.log"
	
* INFO:
    FILENAME                =   "log\\info_log_%datetime{%Y%M%d}.log"
	
* VERBOSE:
    ENABLED                 =   false

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

 

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

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Easylogging是一个简单易用的日志,它可以帮助开发人员在程序运行过程中记录并追踪各种日志信息。它提供了许多便捷的方法,使开发人员能够根据实际需要对日志进行配置,并将其输出到不同的地方,如控制台、文件等。 多线程是一种在同一个进程中同时执行多个任务的方法。多线程可以提高程序的并发性和效率,但也会带来一些问题。其中一个常见的问题是内存暴涨。 内存暴涨指的是程序在运行过程中占用的内存空间急剧增加。多线程程序中,每个线程都有自己的栈空间,用于存储局部变量等数据。当多个线程同时执行时,可能会导致大量的栈帧被同时创建和销毁,从而占用大量的内存空间。此外,多线程程序还可能存在共享数据的问题,需要使用一些同步机制来保证数据的正确性,这也会增加内存的开销。 为了解决多线程程序中的内存暴涨问题,可以采取一些措施。首先,可以对线程进行优化,尽量减少线程的创建和销毁次数,减少栈空间占用。其次,可以优化共享数据的访问方式,使用一些高效的同步机制,如读写锁、原子操作等,减少内存开销。此外,还可以使用一些内存管理工具来监测和调优程序的内存使用情况,及时发现和解决内存暴涨问题。 总结来说,Easylogging可以帮助我们方便地记录和追踪日志信息,多线程能够提高程序的并发性和效率,但同时也会带来内存暴涨的问题。为了解决内存暴涨,我们可以采取一些优化措施,减少线程的创建和销毁次数,优化共享数据的访问方式,并使用内存管理工具监测和调优程序的内存使用情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值