zoukankan      html  css  js  c++  java
  • 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冲突。

    测试代码如下:

    /********************************************************
    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文件,添加如下代码:

    /********************************************************
    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 输出结果如下:

    源码地址(windows): 点击下载

    没有下载积分的,可以关注下面公众号,回复"102"获取源码

    源码地址(linux): 点击下载

    没有下载积分的,可以关注下面公众号,回复"103"获取源码

    欢迎加群交流:C/C++开发交流

  • 相关阅读:
    【BZOJ1924】【SDOI2010】所驼门王的宝藏(Tarjan,SPFA)
    【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)
    【BZOJ1008】【HNOI2008】越狱(组合数学)
    【HNOI2004】敲砖块(动态规划)
    【Luogu1919】 A*B Problem升级版(FFT)
    【Luogu3803】多项式乘法FFT(FFT)
    【Luogu3919】可持久化数组(主席树)
    【NOIP2016】换教室(动态规划)
    【NOIP2015】斗地主(搜索,贪心)
    【NOIP2015】子串(动态规划)
  • 原文地址:https://www.cnblogs.com/woniu201/p/11694600.html
Copyright © 2011-2022 走看看