windows和linux环境下使用google的glog日志库

glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5。

githut地址:https://github.com/google/glog,避免新版本踏坑,习惯性选用低版本v0.3.3。

一:生成windows库

源码下载完成后,根目录下会有google-glog.sln工程文件呢,用visual studio打开会有四个项目,分别如下:
1.libglog:生成动态库的源码
2.libglog_static:生成静态库的源码
3.libglog_unittest:测试动态库的源码工程
4.libglog_unittest_static:测试静态库的源码工程

windows下使用动态库演示,编译libglog工程,生成”libglog.dll”和”libglog.lib”库文件

二:windows下使用glog库

1.如你使用静态库,需要添加#define

GOOGLE_GLOG_DLL_DECL,动态库不需要添加

2.如你工程中添加了<windows.h>,直接编译会报如下错误:

"ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail."

解决办法:添加宏 "#define GLOG_NO_ABBREVIATED_SEVERITIES",并且代码中的要使用google::GLOG_ERROR代替google::ERROR,google::GLOG_INFO代替google::INFO,google::GLOG_WARNING代替google::WARNING,google::GLOG_FATAL代替google::FATAL

原因:windows.h中定义的宏ERROR与glog中定义的宏ERROR冲突。

测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/********************************************************
Copyright (C), 2016-2018,
FileName: main
Author: woniu201
Email: wangpengfei.201@163.com
Created: 2017/08/23
Description: Glog使用Demo
********************************************************/
#include <Windows.h>
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include <iostream>
#include <string>
#include "glog/logging.h"

using namespace std;
#pragma comment(lib, "lib/libglog.lib")

void main()
{
//初始化参数
FLAGS_logtostderr = FALSE; //TRUE:标准输出,FALSE:文件输出
FLAGS_alsologtostderr = TRUE; //除了日志文件之外是否需要标准输出
FLAGS_colorlogtostderr = FALSE; //标准输出带颜色
FLAGS_logbufsecs = 0; //设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size = 10; //日志文件大小(单位:MB)
FLAGS_stop_logging_if_full_disk = true; //磁盘满时是否记录到磁盘

//FLAGS_minloglevel = google::GLOG_INFO

//glog初始化
google::InitGoogleLogging("mqttserver");
google::SetLogDestination(google::GLOG_INFO,"D:\\project\\vm\\test");

while (1)
{
LOG(INFO)<<"this is info log" ;
LOG(WARNING)<<"this is warning log";
LOG(ERROR)<<"this is error log";
//LOG(FATAL) << "this is fatal log";
Sleep(1000);
}

//条件日志输出
int i = 4;
LOG_IF(INFO, i == 4)<<"if log";

google::ShutdownGoogleLogging();
getchar();
return;
}

运行输出结果如下:

三:生成linux库

Linux版本使用的centos7.3,编译生成库

1.  cd glog-0.3.3
2.  ./configure
3. make

make完成后会在.lib下生成相应的库文件

四.Linux下使用glog库

Linux使用静态库来测试,copy静态库libglog.a和src/glog的头文件到自己的工程目录,创建main.cpp文件,添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/********************************************************
Copyright (C), 2016-2018,
FileName: main
Author: woniu201
Email: wangpengfei.201@163.com
Created: 2017/08/23
Description: Glog使用Demo
********************************************************/
#include <stdio.h>
#include "glog/logging.h"

int main()
{
//初始化参数
FLAGS_logtostderr = FALSE; //TRUE:标准输出,FALSE:文件输出
FLAGS_alsologtostderr = TRUE; //除了日志文件之外是否需要标准输出
FLAGS_colorlogtostderr = FALSE; //标准输出带颜色
FLAGS_logbufsecs = 0; //设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size = 10; //日志文件大小(单位:MB)
FLAGS_stop_logging_if_full_disk = true; //磁盘满时是否记录到磁盘

google::InitGoogleLogging("mqttserver");
google::SetLogDestination(google::GLOG_INFO,"./test");

LOG(INFO) << "this is log";
LOG(WARNING) << "this is warnning";
LOG(ERROR) << "this is error";
google::ShutdownGoogleLogging();
}

编译:g++ main.cpp -o main -L. -lglog -lpthread

运行:./main 输出结果如下:

关注下面公众号,回复”102”获取windows源码

关注下面公众号,回复”103”获取linux源码

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×