一、 概述

Google glog是一个基于程序级记录日志信息的C++库,编程使用方式与c++的stream操作类似,例如:
LOG(INFO) << “one” << “two” << “three”;

“LOG”宏为日志输出关键字,”INFO”为严重性程度。

主要支持功能:

1、 严重性分级记录信息:INFO、WARNING、ERROR、FATAL。

2、 可以有条件地记录日志信息。

3、 有条件终止程序。丰富的条件判断定宏,可预设程序终止条件。

4、 异常信号处理。程序异常情况,可自定义异常处理过程。

5、 支持debug功能。可只用于debug模式。

6、 线程安全日志记录方式。

7、 系统级日志记录。

8、 Google perror风格日志信息。

9、精简日志字符串信息。

二、功能使用

2.1 严重性分级记录信息

glog可通过指定的严重性等级,来选择性记录日志。日志信息严重性等级按由低到高排列依次为:INFO、WARNING、ERROR和FATAL四级。

2.2 可以有条件地记录日志信息

  • glog可以控制日志信息再指定条件下进行记录。具体使用如下:

1、 LOG_IF(INFO, num_cookies > 10) << “Got lots of cookies”;

上面的语句表示,只有当num_cookies > 10条件成立时,”Got lots of cookies”日志信息才被记录。

2、 LOG_EVERY_N(INFO, 10) << “Got the ” << COUNTER << “the cookies”;

上面的语句表示,在程序中周期性的记录日志信息,在该语句第1、11、21.....次被执行的时候,记录日志信息。COUNTER变量表示该语句被执行的次数。

3、 LOG_IF_EVERY_N(INFO, (size > 1024), 10) << “Got the “ << counter << “the big cookies”;

上面的语句为1,2项功能的合并,size>1024的条件连续成立10次的时候记录日志信息。COUNTER变量表示该条件成立的次数。

4、 LOG_FIRST_N(INFO, 20) << “Got the ” << counter << “the cookies”;

上面的语句表示,当该语句只在首次执行了20次以后记录日志信息, COUNTER变量表示该语句被执行的次数。

2.3 有条件终止程序

​ glog提供了CHECK宏,用于在调试地时候中止程序,及早发现程序错误。当通过该宏指定的条件不成立的时候,程序会中止,并且记录对应的日志信息。功能类似于ASSERT,区别是CHECK宏不受NDEBUG约束,在release版中同样有效。具体使用如下:

​ CHECK(fp->Write(x) == 4) << “Write failed!”;

​ 当fp->Write(x) == 4成立时,记录“Write failed!”日志信息,并且中止程序,其中fp->Write(x) == 4为判定条件,日志信息以c++的stream操作形式生成。

glog提供了多个便利的宏来处理特定关系的判定。具体有:

**

1、判定大小关系

CHECK_EQ, CHECK_NE, CHECK_LE, CHECK_LT, CHECK_GE, CHECK_GT,使用这些宏需要注意类型一致,如果出现类型不一致的,可使用static_cast转换。

2、判定指针是否为空

​ CHECK_NOTNULL(some_ptr),可用于对象初始化的时候。

3、判定字符串是否相等

​ CHECK_STREQ, CHECK_STRNE, CHECK_STRCASEEQ, CHECK_STRCASENE。可进行大小写敏感或不敏感字符串来分别判定。

4、判定浮点是否相等或相近

CHECK_DOUBLE_EQ,CHECK_NEAR。这两个宏都需要指定一个可容忍的偏差上限。
当这些宏判定条件不成立时,glog会生成一个FATAL级别的日志信息,该信息包含比较的两个值和stream方式传入的字符串,然后中止程序。

2.4 异常信号处理

glog提供了比较方便的程序异常处理机制。例如,当程序出现SIGSEGV异常信号时,glog的默认异常处理过程会导出非常有用的异常信息。异常处理过程可以通过google::InstallFailureSignalHandler()来自定义。下面为异常处理过程的输出例子:

*** Aborted at 1225095260 (unix time) try “date -d @1225095260” if you are using GNU date ***

默认情况下,异常信息是输出到stderr,通过InstallFailureWriter()可以改变输出目标。

2.5 支持debug功能

glog提供特定的宏只在debug模式下生效。以下分别对应LOG、LOG_IF、DLOG_EVERY_N操作的专用宏。

DLOG(INFO) << “Found cookies”;

DLOG_IF(INFO, num_cookies > 10) << “Got lots of cookies”;

DLOG_EVERY_N(INFO, 10) << "Got the " << COUNTER << “the cookies”;

2.6 线程安全日志记录方式

​ glog提供了线程安全的日志记录方式。在<glog/raw_logging.h>文件中提供了相关的宏,如,RAW_CHECK,RAW_LOG等。这些宏的功能与CHECK,LOG等一致,除此以外支持线程安全,不需要为其分配任何内存和提供额外的锁(lock)机制。

2.7 系统级日志记录

​ glog除了提供了普通的日志记录宏,还提供SYSLOG, SYSLOG_IF,和 SYSLOG_EVERY_N宏,这些宏将日志信息通过syslog()函数记录到系统日志。

2.8 Google perror风格日志信息

glog提供了与LOG*和CHECK宏作用等价的PLOG()、PLOG_IF() 和PCHECK()宏,不同的是,后者在记录日志信息的时候,会将errno的状态及其描述附加到日志描述中。

如:

PCHECK(write(1, NULL, 2) >= 0) << “Write NULL failed”;

当条件不成立时,会输出日志信息:

F0825 185142 test.cc:22] Check failed: write(1, NULL, 2) >= 0 Write NULL failed: Bad address [14]

** 2.9 精简日志字符串信息**

​ 日志信息的字符串会占用比较大的内存空间,另外还带来隐私泄露的问题。glog提供了GOOGLE_STRIP_LOG宏在编译时候去除日志的字符串信息。

带你了解gLog库,一篇gLog库的总结相关推荐

  1. 深度学习库 caffe使用 源码分析 依赖库分析 caffe glog gflags openBlas prototxt yolo_darknet 转 caffe

    深度学习库 caffe使用 源码分析 依赖库分析 caffe glog gflags openBlas 本文github链接 yolo_darknet 转 caffe caffe 安装 Caffe代码 ...

  2. logger(三):其他log库的介绍(glog的用法)

    Glog等一些log库 在写代码的过程中,打log肯定是少不了的,毕竟不能总靠调试来发现问题.我们可以试着使用自己写一些log库,也可以使用现成的log库,成熟的log库非常多,log4cpp.log ...

  3. swift_036(Swift之第三方库SwiftyJSON篇)

    [快速学会Swift第三方库] SwiftyJSON篇 SwiftyJSON使得用Swift处理JSON数据更加容易.这是解析JSON字符串封装类.实现功能与JavaScript中的JSON.pars ...

  4. Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍经常使用的开发库,包含依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本号向低版本号 ...

  5. 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)——(一)ESP430开发环境搭建之Energia

    疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (一)ESP430开发环境搭建之Energia 众所周知Launchpad系列开发板在之前很长一段时间内皆由KEIL5等开发环境开发,但此类开发 ...

  6. 焱老师带你学习MYSQL系列 第二篇 (MYSQL 数据结构)

    相关系列链接 焱老师带你学习MYSQL系列 第六篇 (MYSQL是如何实现锁的) 焱老师带你学习MYSQL系列 第五篇 (MYSQL事务隔离级别是如何实现的) 焱老师带你学习MYSQL系列 第四篇 ( ...

  7. swift_035(Swift之第三方库Kingfisher篇)

    [快速学会Swift第三方库] Kingfisher篇 Kingfisher是一个轻量的下载和缓存网络图片库.下载和缓存是异步进行操作,已经下载好的图片会缓存在内存和本地,极大得提高app的体验. ( ...

  8. 计算机基础知识题库选择题,计算机基础知识篇选择题库

    计算机基础知识篇选择题库 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 计算机基础知识篇选择题库1.微型计算机的性能指标不包括___ ...

  9. 二十六篇,Linux库文件(动态库和静态库)的制作。

    一.嵌入式linux库文件概念. 1.什么是库文件? 在linux下,有非常多的库文件. 例如: /lib                        --> 存放系统自带的库文件       ...

  10. 关于计算机的英语作文带翻译100字,求30篇100字英语作文带翻译

    求30篇100字英语作文带翻译以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 求30篇100字英语作文带翻译 你搜索一下 ...

最新文章

  1. 15万人调查发现:做博后越久,一辈子挣的钱越少
  2. 如何破解安卓手机上的图形锁(九宫格锁)
  3. IP、TCP和DNS与HTTP的密切关系
  4. 杭电ACM--2004成绩转换
  5. 关于java.lang.ArithmeticException: divide by zero的异常
  6. oracle异构迁移,异构数据库系统迁移到Oracle 工具 - Oracle SQL Developer
  7. mojing SDK根据坐标进行移动
  8. 轨道客流预测TransCAD公交分配结果详解
  9. 头文件<ctype.h>
  10. 阿里巴巴实习生面试悲惨经历
  11. Python 雪球API 股票价格监控预警程序脚本
  12. 第二十一章 : 文本处理
  13. oracle++spm,ORACLE 11G 使用SPM来调整SQL语句的执行计划
  14. 职场各“族”都能成功
  15. 广州二本计算机专业大学排名及分数线,二本大学排名及分数线理科
  16. 第1章 KRKR游戏系统汉化说明
  17. 网站上线要做的事和不该做的事,你知道吗?
  18. 信号满格无去连接服务器,小米10信号满格但是没网络
  19. matlab 中lsim的用法,lsim的用法
  20. 如何最大程度地利用制造ERP软件

热门文章

  1. 百度只为营销而存在?
  2. Spring @Conditional注解
  3. 赛马网基本算法之一 (股神问题)
  4. 【Python3爬虫】我爬取了七万条弹幕,看看RNG和SKT打得怎么样
  5. 网络状态是未连接,但是可以上网。强迫症患者福利
  6. Netty简易聊天室
  7. 埃及分数 古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解。
  8. C语言中的野指针问题
  9. 解决git上传提交的时出现:Please tell me who you are.问题
  10. html div height=,height在css里什么意思?