glog下载、安装、使用

简介

  • 最近在学习在程序中加入日志记录系统,通过搜索资料发现了glog这么一个由google开源提供的轻量级日志库,于是便开始了入坑的过程,以下是我学习glog的一点总结

glog下载 

首先我们要做的就是下载glog的源码

1)直接点击github链接《Github/glog源码》进入gibhub页面

2)然后点击Clone or download-------->Download Zip

Github源码下载
Github源码下载

3)解压glog-master,目录结构如下图,可以发现目录下有个CMakeLists.txt。所以接下来我们会用到cmake这个工具

glog目录结构
glog-master目录结构

4)到cmake的官方链接《cmake下载地址》下载cmake。我选择的是<Windows win32-x86 ZIP>

cmake下载
cmake下载

5)解压cmake安装包之后,我们要做的就是把<cmake/bin>加入环境变量,右键我的电脑-->高级系统设置-->环境变量。

6)按下Win+R,然后输入 cmake-gui,可以看到如下窗口 

7)点击Configure按扭,选择Visual Studio 版本,会弹出一些红色的选项,做一下简单的修改就行.

记住安装路径不要选择系统目录,不然后续操作会因为没有管理员权限失败

8)点击Generate、Open Project即可打开解决方案

9)在刚刚的CMAKE_INSTALL_PREFIX路径中可以看到生成的glog静态库文件

至些glog静态库生成完成,接下来就是一个简单的例子去使用glog了。


老板,来个粟子吧

下面开始举个例子,直接用VS创建一个控制台应用程序,然后做如下配置

  • 右键项目属性
  • 配置属性-->C/C++-->常规-->附加包含目录-->添加 <glog安装路径>/include
  • 配置属性-->链接器-->常规-->附加库目录-->添加<glog安装路径>/lib
  • 配置属性-->链接器-->输入-->附加依赖项-->添加glogd.lib(如果你的程序是Release版本就写glog.lib)

之后就可以写一个最简单的glog代码示例

// USEglog.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#define GOOGLE_GLOG_DLL_DECL    // 由于我们使用的glog的静态库,一定要定义这个宏

#include "glog/logging.h"

int main(int argc, char* argv[])
{
    google::InitGoogleLogging(argv[0]);             // 全局初始化glog
    google::SetStderrLogging(google::INFO);         // 设置glog的输出级别,这里的含义是输出INFO级别以上的信息

    LOG(INFO) << "This is my first glog INFO ";     // 像C++标准流一样去使用就可以了,这时把这条信息定义为INFO级别

    google::ShutdownGoogleLogging();                // 全局关闭glog
    return 0;
}

输出如下图

那我们这做的和cout << xxxx 有区别呢?是的没啥区别,我就是在坑大家!!!!开个玩笑,看接下来的配置


修改glog的一些设置

1)修改我们样例程序的代码

// USEglog.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#define GOOGLE_GLOG_DLL_DECL    // 由于我们使用的glog的静态库,一定要定义这个宏

#include "glog/logging.h"

int main(int argc, char* argv[])
{
    google::InitGoogleLogging(argv[0]);              // 全局初始化glog
    google::SetStderrLogging(google::WARNING);       // 设置glog的输出级别,这里的含义是输出WARNING级别以上的信息

    LOG(INFO) << "This is my first glog INFO ";      // 像C++标准流一样去使用就可以了,把这条信息定义为INFO级别
    LOG(WARNING) << "This is my first glog WARNING"; // 像C++标准流一样去使用就可以了,把这条信息定义为WARNING级别
    LOG(ERROR) << "This is my first glog ERROR";     // 像C++标准流一样去使用就可以了,把这条信息定义为ERROR级别

    google::ShutdownGoogleLogging();                 // 全局关闭glog

    return 0;
}

2)输出如下,可以看到WARNING和ERROR级别的信息,

3)但是INFO级别的信息我们没有看到,这是因为我在代码中有这么一行设置。 

google::SetStderrLogging(google::WARNING);       // 设置glog的输出级别,这里的含义是输出WARNING级别以上的信息

 glog一共有4个级别的信息可以定义

  • INFO
  • WARNING
  • ERROR
  • FATAL(这个级别的输出会导致程序强制中断)

 4)增加一行代码,可以在终端区分颜色

    FLAGS_colorlogtostderr = true;                   // 开启终端颜色区分


将glog日志信息写入到磁盘log文件中

1)修改样例程序代码如下

// USEglog.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#define GOOGLE_GLOG_DLL_DECL    // 由于我们使用的glog的静态库,一定要定义这个宏

#include "glog/logging.h"

int main(int argc, char* argv[])
{
    google::InitGoogleLogging(argv[0]);                // 全局初始化glog
    google::SetStderrLogging(google::GLOG_INFO);       // 设置glog的输出级别,这里的含义是输出INFO级别以上的信息

    // 设置INFO级别以上的信息log文件的路径和前缀名
    google::SetLogDestination(google::GLOG_INFO, "C:\\users\\xxxx\\documents\\logdir\\INFO_");

    // 设置WARNING级别以上的信息log文件的路径和前缀名
    google::SetLogDestination(google::GLOG_WARNING, "C:\\users\\xxxx\\documents\\logdir\\WARNING_");

    // 设置ERROR级别以上的信息log文件的路径和前缀名
    google::SetLogDestination(google::GLOG_ERROR, "C:\\users\\xxxx\\documents\\logdir\\ERROR_");

    FLAGS_colorlogtostderr = true;                     // 开启终端颜色区分

    LOG(INFO) << "This is my first glog INFO ";        // 像C++标准流一样去使用就可以了,把这条信息定义为INFO级别
    LOG(WARNING) << "This is my first glog WARNING";   // 像C++标准流一样去使用就可以了,把这条信息定义为WARNING级别
    LOG(ERROR) << "This is my first glog ERROR";       // 像C++标准流一样去使用就可以了,把这条信息定义为ERROR级别

    google::ShutdownGoogleLogging();                   // 全局关闭glog
    return 0;
}

2)在你设置的目录下便可以看到log文件了

  • INFO_:存储了INFO及INFO级别以上的日志信息
  • WARNING_:存储了WARNING及WARNING级别以上的日志信息
  • ERROR_:存储了ERROR及ERROR级别以上的日志信息

番外

如果你的程序中包含了windows.h头文件,则需要做一些额外的工作,

#include <glog/logging.h>之前,#define  GLOG_NO_ABBREVIATED_SEVERITIES

#define GLOG_NO_ABBREVIATED_SEVERITIES
#include "glog/logging.h"

如果你使用的是glog静态库

一定要#define GOOGLE_GLOG_DLL_DECL

#define GOOGLE_GLOG_DLL_DECL
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include "glog/logging.h"

猜你喜欢

转载自blog.csdn.net/Pig_Pig_Bang/article/details/81632962