C++第三方日志库Glog的安装与使用介绍

 更新时间:2022年02月24日 10:06:45   作者:wendy_ya  
这篇文章主要介绍了C++第三方日志库Glog的安装与使用介绍,本文配置所采用的环境为Visual Studio2017,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下

一、glog介绍

Google Logging(glog)是一个实现应用程序级日志记录的C++98库。该库提供了基于C++风格流和各种辅助宏的日志API。

二、glog下载

Glog的地址已经从https://code.google.com/p/google-glog/ 变为了https://github.com/google/glog,请从该链接地址下载最新版。

官方文档:http://google-glog.googlecode.com/svn/trunk/doc/glog.html。

三、环境介绍

本文配置所采用的环境为Visual Studio2017。

三、glog的编译详解

3.1 利用CMake进行编译,生成VS解决方案

首先需要下载并安装CMake,下载方法参考文章:Windows下CMake的下载与安装详解

然后需要从github上下载glog的源码。我们这里将源码下载到文件夹E:\3PartyLibrary下。
然后在glog-master文件夹内新建一个build文件夹,用于存放编译完成的文件。
【注意】:如果建在该文件夹外部,会引发错误!!!

然后使用cmake-gui生成VS解决方案。如下图所示。

这里选择你使用的编译器(我这里使用的是Visual Studio2017),然后在下方输入x64:

点击Finish完成。稍等几分钟CMake进行配置,配置完毕后如下图所示:

这时需要进行如下设置:

①是BUILD_SHARED_LIBS,这个选项我们要勾上,因为我们需要动态库。
②是CMAKE_INSTALL_PREFIX,这个路径是install后生成的头文件和库文件存放的路径,这里我们在源码同级目录下创建一个文件夹,命名为install。

③和④分别是WITH_GFLAGS和WITH_UNWIND,这两个我也不是很清楚是做什么的,但是如果把这两个勾上的话,在cmake的过程中就会报warning,因此都不勾。

之后分别点击Configure和Generate,生成完成后没有红色选项。

3.2 利用VS对项目进行编译

上述步骤生成完毕后,会在build目录下会生成sln解决方案,使用Visual Studio打开glog.sln解决方案,打开后目录如下:

选择Release模式,分别对ALL_BUILD和INSTALL两个项目进行生成,如下图所示。(如果项目在debug模式下开发,就在debug模式下生成glog的DLL文件;如果项目在release模式下开发,就在release模式下生成glog的DLL文件;我这里选择的是Release模式)

生成过程应该不会有错误。

生成成功后就在install目录下生成头文件和库文件。如下图所示。

ok!以上便是glog编译的全部内容了,接下来的小节介绍一下glog的基本使用。

四、glog的基本使用

4.1 创建VS项目

新建一个Visual Studio项目,Release生成。

这里,为了代码目录结构清晰,将上面生成的头文件放在了include文件夹中,将上面生成的.lib文件放在了lib文件夹中,将上面生成的.dll文件放在工程所在文件夹中,如下图所示。

4.2 将glog相关文件包含在项目中

在使用vs新建项目后,需要将我们上面生成的头文件包含在项目的Include Directories中,将上面生成的库文件包含在项目的Library Directories中。如下图所示。

【注意】:一定要选择x64和Release!!!

4.3 编写代码进行测试

最简单的测试代码如下:

#ifndef GLOG_NO_ABBREVIATED_SEVERITIES
#define GLOG_NO_ABBREVIATED_SEVERITIES // 如果不加这个宏定义代码就会报错
#endif
#include <glog/logging.h>

#pragma comment(lib, "glog.lib")

int main(int argc, char* argv[])
{
	FLAGS_alsologtostderr = true;//是否将日志输出到文件和stderr
	google::InitGoogleLogging("test");//使用glog之前必须先初始化库,仅需执行一次,括号内为程序名
	LOG(INFO) << "Hello,GLOG!";
	google::ShutdownGoogleLogging();//当要结束glog时必须关闭库,否则会内存溢出

	return 0;
}

输出为:

I20220220 14:27:55.136509 5080 test.cpp:9] Hello,GLOG!

【注意】:GLog在整个项目周期中只允许生成一个日志文件,也就是说,glog从初始化到注销整个过程,不允许再次调用glog的初始化或者注销,另一种意思可以理解为只允许有一个实例化对象。

4.4 测试代码2

测试代码如下:

#ifndef GLOG_NO_ABBREVIATED_SEVERITIES
#define GLOG_NO_ABBREVIATED_SEVERITIES // 如果不加这个宏定义代码就会报错
#endif
#include <glog\logging.h>

#pragma comment(lib, "glog.lib")
int main()
{
	google::InitGoogleLogging("test");//使用glog之前必须先初始化库,仅需执行一次,括号内为程序名
	FLAGS_alsologtostderr = true;//是否将日志输出到文件和stderr
	FLAGS_colorlogtostderr = true;//是否启用不同颜色显示
	google::SetLogDestination(google::GLOG_INFO, "E:\\logs\\INFO_");//INFO级别的日志都存放到logs目录下且前缀为INFO_
	google::SetLogDestination(google::GLOG_WARNING, "E:\\logs\\WARNING_");//WARNING级别的日志都存放到logs目录下且前缀为WARNING_
	google::SetLogDestination(google::GLOG_ERROR, "E:\\logs\\ERROR_");	//ERROR级别的日志都存放到logs目录下且前缀为ERROR_
	google::SetLogDestination(google::GLOG_FATAL, "E:\\logs\\FATAL_");	//FATAL级别的日志都存放到logs目录下且前缀为FATAL_
	LOG(INFO) << "info";
	LOG(WARNING) << "warning";
	LOG(ERROR) << "error";
	/*LOG(FATAL) << "fatal";*/
	google::ShutdownGoogleLogging();//当要结束glog时必须关闭库,否则会内存溢出
	return 0;
}

代码执行后,会在E:\logs文件夹下生成四个log文件,这里我没有将FATAL也打印出来是因为当glog检测到"LOG(FATAL)<<"代码时就会直接结束程序,不继续执行后面的代码。

五、代码详解

5.1 define

除了上述在前三行加入代码外,也可以选择添加预处理项。项目属性 ——> c/c++ ——> 预处理器。 添加GLOG_NO_ABBREVIATED_SEVERITIES。

5.2 include

在需要使用glog打印日志的cpp文件中包含头文件,及加载glog库文件。注意:每个使用glog的cpp文件都要添加,代码如下:

#include "glog/logging.h"
#pragma comment(lib,"libglog.lib")

5.3 InitGoogleLogging

用glog之前必须先初始化库,要生成日志文件只需在开始log之前调用一次:

google::InitGoogleLogging(argv[0]);  //括号内是程序名

5.4 ShutdownGoogleLogging

当要结束glog时必须关闭库,否则会内存溢出:

google::ShutdownGoogleLogging();

下一篇文章(C++第三方日志库Glog基本语法介绍)会对glog库的基本语法进行详细介绍,欢迎关注~

参考:

https://blog.csdn.net/w_b_h/article/details/107070652
https://blog.csdn.net/qq_27278957/article/details/84648912
https://blog.csdn.net/fx_odyssey/article/details/102815949
https://blog.csdn.net/weixin_33929309/article/details/85541046
https://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html
https://my.oschina.net/u/4320185/blog/3755592

到此这篇关于C++第三方日志库Glog的安装与使用介绍的文章就介绍到这了,更多相关C++第三方日志库Glog内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Qt之ui在程序中的使用-多继承法介绍

    Qt之ui在程序中的使用-多继承法介绍

    本文将介绍Qt之ui在程序中的使用-多继承法,需要的朋友可以参考
    2012-11-11
  • C语言冷知识之预处理字符串操作符详解

    C语言冷知识之预处理字符串操作符详解

    当年学习C语言的第一门课就提到过标记(Token)的概念,不过,相信在多年之后你再次听到这个术语时会一脸懵逼,比如我。因此特地翻了翻资料,整理下来这些笔记,希望对大家有所帮助
    2022-11-11
  • Seesion在C++服务端的使用方法

    Seesion在C++服务端的使用方法

    这篇文章主要介绍了Seesion在C++服务端是怎么使用的?本文给出了解决方案和实例代码供大家参考,需要的朋友可以参考下
    2020-02-02
  • C++ 栈和队列的实现超详细解析

    C++ 栈和队列的实现超详细解析

    栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解
    2022-03-03
  • VS Code远程连接Linux服务器调试C程序的操作方法

    VS Code远程连接Linux服务器调试C程序的操作方法

    这篇文章主要介绍了VS Code远程连接Linux服务器调试C程序的操作方法,打开远程 Linux 服务器上的文件夹本文以 /root/ 为例,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • 利用C++编写简易宝可梦对战小游戏

    利用C++编写简易宝可梦对战小游戏

    本文利用C++语言编写了一个小时候课间嘴上玩的那种宝可梦游戏,只有早期的三个宝可梦和基础招式,感兴趣的朋友快跟随小编一起学习学习吧
    2022-06-06
  • QT中窗口关闭自动销毁的实现示例

    QT中窗口关闭自动销毁的实现示例

    这篇文章主要介绍了QT中窗口关闭自动销毁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C语言实现三子棋游戏

    C语言实现三子棋游戏

    这篇文章主要为大家详细介绍了C语言实现三子棋游戏的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 在C语言中调用C++做的动态链接库

    在C语言中调用C++做的动态链接库

    如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.
    2016-05-05
  • C语言大作业之图书管理系统的实现详程

    C语言大作业之图书管理系统的实现详程

    随着网络技术的高速发展,计算机应用的普及,利用计算机对图书馆的日常工作进行管理势在必行,趁着寒假时间手把手带你用C语言实现一个图书管理系统,大家可以在过程中查缺补漏,提升水平
    2022-01-01

最新评论