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源码