C++中Glog使用详解

24 篇文章 1 订阅

简述

Google Glog 是一个C++语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助手宏。

方法

在C++中使用Glog,有如下几个步骤:

(1) 开源项目首页已经从https://code.google.com/p/google-glog/迁移到https://github.com/google/glog。当前主版本是0.3.4。

(2) 下载代码后,双击根目录下的google-glog.sln,使用需要开发的vs,在相应的模式下生成DLL库(如果项目在debug模式下开发,就在debug模式下生成glog的DLL文件;如果项目在release模式下开发,就在release模式下生成glog的DLL文件;)

(3) 在解决方案下有四个工程:libglog(是动态链接库工程,生成libglog.dll和libglog.lib),libglog_static(是静态库工程,生成libglog_static.lib,运行时不需要libglog.dll),logging_unittest和logging_unittest_static是相应的测试工程。

(4) 不需要更改工程属性。Glog不支持Unicode宽字符集,工程属性字符集保持多字节字符集。“C/C++”-“代码生成”中的“运行库”,libglog动态库工程必须选择“多线程DLL”或“多线程调试DLL”,libglog_static静态库工程必须选择“多线程”或“多线程调试”。

(5) 以动态库工程、release模式为例。在项目目录下新建文件夹\thirdparty\glog,在glog目录下创建glog、lib文件夹。glog目录下存放GLog中需要用到的头文件,这些头文件在GLog项目中\src\windows\glog中。lib目录中存放GLog的lib文件libglog.lib,该文件在GLog项目下的Release目录下。

 (6) 将GLog项目下的Release目录下的libglog.dll文件放置在项目的Release目录下。

(7) 环境配置。项目属性 --> vc++目录 --> 包含目录,将项目下的glog头文件目录配置进去。

 注意:目录配置时,注意是配置到第一级glog目录。

(8)项目属性 --> vc++目录 --> 库目录,将项目下的glog的lib文件目录配置进去。

 (9)添加预处理项。项目属性 --> c/c++ --> 预处理器。 添加GLOG_NO_ABBREVIATED_SEVERITIES。

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

  • 在需要使用glog打印日志的cpp文件中包含头文件,及加载glog库文件。注意:每个使用glog的cpp文件都要添加。
#include "glog/logging.h"
#pragma comment(lib,"libglog.lib")
  •  在整个项目开始的地方,调用GlogInit()方法(这个方法是我自己写的,重要的是方法中的内容)。
  • 在项目中任何类中、任何地方,都可以使用。
LOG(INFO)<< ” ” ;
LOG(INFO)<< 变量名 ;  

  其中INFO只是glog的一个日志级别,还有其他的级别。

 

  • 在整个项目结束的地方,调用GlogUnInit()方法,日志生成成功。如果不调用此方法,日志文件不会生成。

参考链接:https://www.cnblogs.com/hiloves/p/6009707.html,感谢分享。

附件是VS2010的工程,C++日志类,谷歌的东西,很好用,也很强大哦! glog简介 Google glog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例: LOG(INFO) << "Found " << num_cookies << " cookies"; “LOG”宏为日志输出关键字,“INFO”为严重性程度。 主要支持功能: 1, 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为; 2, 严重性分级,根据日志严重性分级记录日志; 3, 可有条件地记录日志信息; 4, 条件止程序。丰富的条件判定宏,可预设程序终止条件; 5, 异常信号处理。程序异常情况,可自定义异常处理过程; 6, 支持debug功能。可只用于debug模式; 7, 自定义日志信息; 8, 线程安全日志记录方式; 9, 系统级日志记录; 10, google perror风格日志信息; 11, 精简日志字符串信息。 开源代码托管 开源代码地址:https://github.com/google/glog 其实官方开源代码已经有大量demo可以参考了,也提供了VS可以直接打开编译的项目。 如何使用 1:把glog文件夹拷贝到源代码目录 2:在工程设置添加附加包含目录(glog\include;)和附加库目录(glog\lib;),在附件依赖项添加对应lib文件,一一对应关系如下: MDd libglog32MDd.lib MD libglog32MD.lib MTd libglog32MTd.lib MT libglog32MT.lib 建议使用MDd和MD方式,带上对应的dll(在glog\bin目录,需要时拷贝到bin文件输出目录)可以避免使用MTd,MT引起的内存泄露是值得的。 #include #include using namespace std; //包含glog头文件,建议放在stdafx.h //#define GOOGLE_GLOG_DLL_DECL // 使用静态库的时候用这个,不过我测试静态库有内存泄露,所以不推荐使用静态库 #define GLOG_NO_ABBREVIATED_SEVERITIES #include "glog/logging.h" //获取当前程序的运行目录 string GetAppPathA() { char szExePath[MAX_PATH] = {0}; GetModuleFileNameA(NULL,szExePath,MAX_PATH); char *pstr = strrchr(szExePath,'\\'); memset(pstr+1,0,1); string strAppPath(szExePath); return strAppPath; } void main() { //glog初始化 google::InitGoogleLogging("重签程序"); string strLogPath = GetAppPathA().append("LogInfo\\"); CreateDirectoryA(strLogPath.c_str(),NULL); google::SetLogDestination(google::GLOG_INFO,strLogPath.c_str()); //功能测试 LOG(INFO)<<"log start...";//普通日志 LOG(WARNING)<<"Warning log";//警告日志 LOG(ERROR)<<"Error log";//错误日志 int i = 4; LOG_IF(INFO,i == 4)<<"Log if Test"; //以上就是我常用的几个日志函数了,当然还有很多更加强大的日志相关函数,大家如有有兴趣,可以参照官方给的示例使用, //开源代码地址:https://github.com/google/glog MessageBoxA(NULL,"Test Over",":)",MB_ICONINFORMATION); } 测试程序,我使用的动态链接库方式。(Debug模式代码生成为MDd,Release为MD)。lib是截止现在2015-11-04-21:35是最新的。采用VS2010编译,MTd,MT,MDd,MD方式编译在测试项目都有提供。 博文地址: http://blog.csdn.net/sunflover454/article/details/49643625
C++程序使用glog,需要按照以下步骤进行操作: 1. 下载glog库并进行编译安装。 2. 在程序引入glog头文件:`#include <glog/logging.h>` 3. 初始化glog,在main函数调用:`google::InitGoogleLogging(argv[0]);` 4. 在程序需要记录日志的地方使用glog提供的宏进行记录。例如:`LOG(INFO) << "message";` 5. 可以使用不同的日志级别进行记录,如:`LOG(INFO)`、`LOG(WARNING)`、`LOG(ERROR)`、`LOG(FATAL)`等。 6. 可以通过设置`FLAGS_log_dir`变量,指定日志文件的存储路径。 7. 在程序结束前,可以调用`google::ShutdownGoogleLogging();`来停止glog的日志记录。 下面是一个简单的例子: ```c++ #include <iostream> #include <glog/logging.h> int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); LOG(INFO) << "Program start."; int a = 10, b = 0; if (b == 0) { LOG(ERROR) << "Division by zero!"; } else { LOG(INFO) << "a / b = " << a / b; } LOG(INFO) << "Program end."; google::ShutdownGoogleLogging(); return 0; } ``` 这段程序,我们在程序开始和结束时记录了日志,同时在进行除法运算时,如果除数为0则记录了一个错误日志。执行程序后,会在控制台上输出日志信息: ``` I0714 16:22:10.187763 3221 main.cpp:7] Program start. E0714 16:22:10.187795 3221 main.cpp:12] Division by zero! I0714 16:22:10.187804 3221 main.cpp:14] Program end. ``` 同时会在默认路径下生成一个日志文件,记录了同样的日志信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值