Google-glog 日志库使用手记
作者:高张远瞩(HiLoveS)
博客:http://www.cnblogs.com/hiloves/
转载请保留该信息
Google Glog 是一个C++语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助手宏。试用了一下,感觉不错,试用过程出了不少插曲。
1、开源项目首页已经从https://code.google.com/p/google-glog/迁移到https://github.com/google/glog。当前主版本是0.3.4。
2、下载代码后,双击根目录下的google-glog.sln,Visual Studio 2015提示先进行迁移,成功后就可以编译了。
3、在解决方案下有四个工程:libglog(是动态链接库工程,生成libglog.dll和libglog.lib),libglog_static(是静态库工程,生成libglog_static.lib,运行时不需要libglog.dll),logging_unittest和logging_unittest_static是相应的测试工程。
4、不需要更改工程属性。平台工具集是否是Windows XP(v140_xp)好像并不影响。Glog不支持Unicode宽字符集,工程属性字符集保持多字节字符集。“C/C++”-“代码生成”中的“运行库”,libglog动态库工程必须选择“多线程DLL”或“多线程调试DLL”,libglog_static静态库工程必须选择“多线程”或“多线程调试”。
5、按需要编译库。以静态库为例,动态库多一步将libglog.dll拷贝到程序目录下。分别编译Debug和Release,将Debug版的重命名为libglog_static_d.lib。将编译的lib文件拷贝到根目录\src\glog下,\src\glog是头文件目录。这个版本的静态库在试用时并未发现有内存泄露问题。
6、将\glog目录(包括了头文件和库文件)拷贝到自己的工程目录下。也可以新建另外的库目录,也可以在工程属性的附加目录中增加相应目录,这里采用在代码文件中控制。在工程资源管理器中添加glog头文件,如果先添加glog目录再添加头文件会提示glog头文件中的#include路径出错,手动删除路径中的“glog\”可解决。
7、在需要的地方#include "glog/logging.h"。建议添加到stdafx.h中。
8、使用静态库必须添加#define GOOGLE_GLOG_DLL_DECL。动态库不必添加。
9、因windows.h中定义的宏ERROR,与glog中定义的宏ERROR冲突,所以如果#include <windows.h>后要添加#define GLOG_NO_ABBREVIATED_SEVERITIES,并且代码中要用google::GLOG_ERROR来代替原来的google::ERROR,相应的其他也改为:GLOG_INFO、GLOG_WARNING、GLOG_FATAL。
10、添加库文件:#pragma comment(lib,"glog/libglog_static.lib")。针对Debug和Release版,用#ifdef控制。
#define GOOGLE_GLOG_DLL_DECL
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include "glog/logging.h" #ifdef DEBUG
#pragma comment(lib,"glog/libglog_static_d.lib")
#else
#pragma comment(lib,"glog/libglog_static.lib")
#endif // DEBUG
11、自己的工程使用静态库时,必须选择“多线程”或“多线程调试”。使用动态库则选择“多线程DLL”或“多线程调试DLL”。
12、使用glog之前必须先初始化库,要生成日志文件只需在开始log之前调用一次:
google::InitGoogleLogging(argv[]); //括号内是程序名
当要结束glog时必须关闭库,否则会内存溢出:
google::ShutdownGoogleLogging();
13、设置日志文件保存目录,这个目录必须是已经存在的,否则不能生成日志文件。必须在初始化库之前调用。
FLAGS_log_dir = "c:\\Logs";
14、GLOG 有四个错误级别,枚举如下:
enum SeverityLevel
{
google::INFO = ,
google::WARNING = ,
google::ERROR = ,
google::FATAL = ,
};
15、输出日志:
LOG(INFO) << "info test"; //输出一个Info日志
LOG(WARNING) << "warning test"; //输出一个Warning日志
LOG(ERROR) << "error test"; //输出一个Error日志
LOG(FATAL) << "fatal test"; //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序
16、条件输出:
LOG_IF(INFO, num_cookies > ) << "Got lots of cookies"; //当条件满足时输出日志 LOG_EVERY_N(INFO, ) << "Got the " << google::COUNTER << "th cookie"; //google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息 LOG_IF_EVERY_N(INFO, (size > ), ) << "Got the " << google::COUNTER << "th big cookie"; //上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息 LOG_FIRST_N(INFO, ) << "Got the " << google::COUNTER << "th cookie"; //当此语句执行的前 20 次都输出日志,然后不再输出
17、几个函数:
google::SetLogDestination(google::GLOG_INFO, "log/prefix_"); //设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀
google::SetLogFilenameExtension("logExtension"); //在日志文件名中级别后添加一个扩展名。适用于所有严重级别
google::SetStderrLogging(google::GLOG_INFO); //大于指定级别的日志都输出到标准输出
18、几个参数设置:
FLAGS_logtostderr = true; //设置日志消息是否转到标准输出而不是日志文件 FLAGS_alsologtostderr = true; //设置日志消息除了日志文件之外是否去标准输出 FLAGS_colorlogtostderr = true; //设置记录到标准输出的颜色消息(如果终端支持) FLAGS_log_prefix = true; //设置日志前缀是否应该添加到每行输出 FLAGS_logbufsecs = ; //设置可以缓冲日志的最大秒数,0指实时输出 FLAGS_max_log_size = ; //设置最大日志文件大小(以MB为单位) FLAGS_stop_logging_if_full_disk = true; //设置是否在磁盘已满时避免日志记录到磁盘
19、例子:
// Start google log system:
FLAGS_log_dir = "c:\\Logs";
google::InitGoogleLogging(argv[]);
google::SetLogDestination(google::GLOG_INFO, "c:\\Logs\\INFO_");
google::SetStderrLogging(google::GLOG_INFO);
google::SetLogFilenameExtension("log_");
FLAGS_colorlogtostderr = true; // Set log color
FLAGS_logbufsecs = ; // Set log output speed(s)
FLAGS_max_log_size = ; // Set max log file size
FLAGS_stop_logging_if_full_disk = true; // If disk is full
char str[] = "hello log!";
LOG(INFO) << str;
CStringA cStr = "hello google!";
LOG(INFO) << cStr;
LOG(INFO) << "info test" << "hello log!"; //输出一个Info日志
LOG(WARNING) << "warning test"; //输出一个Warning日志
LOG(ERROR) << "error test"; //输出一个Error日志
google::ShutdownGoogleLogging();
Google-glog 日志库使用手记的更多相关文章
- glog日志库使用笔记
日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活. 在Github上下载glog,解压 ...
- windows和linux环境下使用google的glog日志库
一.概述 glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5. githut地址:https://github.com/googl ...
- ubutun16.04 安装编译glog日志库
glog 是一个 C++ 日志库,它提供 C++ 流式风格的 API.在安装 glog 之前需要先安装 gflags,这样 glog 就可以使用 gflags 去解析命令行参数(可以参见gflags ...
- glog日志库移植Android平台
1.在linux平台下使用ndk交叉编译链编译glog生成libglog.a静态库. 2.将生成的库文件与头文件放到Android项目中,使用JNI方法调用. 3.编译遇到错误“stderr.stdo ...
- glog日志
google 开源日志库 #include <glog/logging.h> yum install glog
- C++的开源跨平台日志库glog学习研究(三)--杂项
在前面对glog分别做了两次学习,请看C++的开源跨平台日志库glog学习研究(一).C++的开源跨平台日志库glog学习研究(二)--宏的使用,这篇再做个扫尾工作,算是基本完成了. 编译期断言 动态 ...
- C++的开源跨平台日志库glog学习研究(二)--宏的使用
上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. ...
- C++的开源跨平台日志库glog学习研究(一)
作为C++领域中为数不多的好用.高效的.跨平台的日志工具,Google的开源日志库glog也算是凤毛麟角了.glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操作. 恰巧趁着五一我也 ...
- C++ 日志库 boost::log 以及 glog 的对比
日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.本文将从设计上和功能上对比 C++ 语言常见的两款日志库: boost::log 和 google-glog . 设计 b ...
随机推荐
- python3 抓取网页资源的 N 种方法
1. 最简单 import urllib.request response = urllib.request.urlopen('http://python.org/') html = response ...
- poj1323-Game Prediction(贪心思想)
贪心的思想:尽量的从最大值找起.然后在剩余之中,再从最大值找起. 一,题意: M个人,每人N张牌,每轮比较谁出的牌大,最大者为胜.现在给定M和N,以及你的牌,要求输出你至少能确保获得几轮的胜利 从&q ...
- 百度网盘生成二维码api
分享出自精神,灵感来自大脑,在百度云网盘分享每一个文件,都会在页面生成一个二维码扫描的图片: 我就进一步看了该图片的地址: 发现没有,圈圈内是不是有点眼熟,就跟其他二维码api接口一样,只要盗用这段东 ...
- 让javascript显原型!
相信以下的javascript让你读起来痛苦不已,告诉你一下简单的办法,就可以让它显出原型!将第一个单词,即eval换成document.write,然后再运行一下,它立即就原形毕露了! eval(f ...
- jxl读取Excel表格数据
调用jxl包实现Excel表格数据的读取,代码如下: import java.io.File; import java.io.IOException; import java.util.ArrayLi ...
- monkey命令
介绍: monkey是一个命令行工具,可以运行在Android模拟器里或真实设备中.它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入.触摸屏输入.手势输入等),可以对待测的 ...
- 网页语言有html,php.jsp,无论什么语言浏览器总是能正常显示,这个解析工作是浏览器完成的吗?
不是,浏览器最基本的语言是html也就是说浏览器只看得懂html.css.js等其他的服务器端动态脚本,比如你说的php.jsp等,解析工作是在服务器完成的!打个比方,你在电脑显示屏上看到的一切东西, ...
- python pip源
pipy国内镜像目前有: http://pypi.douban.com/ 豆瓣 http://pypi.hustunique.com/ 华中理工大学 http://pypi.sdutlinux.o ...
- 【LINUX】VI相关命令
任何用户最常做的事要数创建和编辑文件,包括文档.报告和文字,vi(Visual Editor)是一个有效而相对简单的全荧幕编辑,使用vi,只要记著少量基本指令,就可以开始起步,再学习其他更复杂的指令, ...
- Hadoop 运行 yarn jar 单词统计问题解决
测试单词统计时,运行yarn jar XX.jar 出现如下报错: Caused by: java.io.IOException: Initialization of all the collecto ...