首先来看看Glog文档上是如何介绍DLOG的:

Debug Mode Support

Special "debug mode" logging macros only have an effect in debug mode and are compiled away to nothing for non-debug mode compiles. Use these macros to avoid slowing down your production application due to excessive logging.

DLOG(INFO) << "Found cookies";

下来来看看DLOG宏是如何定义的

#ifndef NDEBUG#define DLOG(severity) LOG(severity)#else#define DLOG(severity) true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)

调用

LOG(INFO) << "info message";

就可以打印日志信息。

#define DLOG(severity) true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)

这段定义不是很好理解,举个例子来分析。

DLOG(INFO) << "Found cookies";

宏展开之后就是

true ? (void) 0 : google::LogMessageVoidify() & LOG(INFO) << "Found cookies"

首先是运算符优先级的问题,加上括号之后

true ? (void) 0 : (google::LogMessageVoidify() & (LOG(INFO) << "Found cookies"))

根据Glog代码中的注释,发现google::LogMessageVoidify() 的作用是去除编译时的警告信息,忽略之。

true ? (void) 0 : (LOG(INFO) << "Found cookies")

这里有个小技巧,问号表达式中,如果条件是true,则:之后的代码并不会执行

我写了个验证逻辑

int i = 0;
true ? (void) 0 : i++;assert(i == 0);

所以这样定义DLOG宏,在Release模式下

DLOG(INFO) << "Found cookies";

展开之后是

(void) 0;

Glog剖析之DLOG相关推荐

  1. caffe中LOG(INFO) DLOG(INFO)介绍(统称Google glog)

    Original url: http://blog.51cto.com/mengjh/546766    本文是根据自己的理解翻译组织了glog的manual,鉴于自身的理解能力和英语水平,可能存在谬 ...

  2. failed to open log file_C++中glog源码剖析以及如何设计一个高效 log模块

    每个开发者编程中都会记录log信息,多数人都会使用log第三方库,log库使用起来很方便,但我们也需要了解log系统的原理,这里以glog为例进行分析. 开始 这里不会介绍glog中是如何控制INFO ...

  3. C++系统日志库精选:深入剖析glog与log4cplus,轻松搭建高效日志系统

    目录标题 引言 日志系统的重要性 glog与log4cplus简介与应用场景 C++日志系统库的选择依据 glog基础知识 glog库的关键功能 glog库的安装与使用 glog库的基本日志功能与级别 ...

  4. 【C++】google glog详解

    0.简介 glog是google的日志管理系统,配合gflags库,通过命令行参数管理日志. 源码下载:https://github.com/google/glog ubuntu安装: sudo ap ...

  5. glog日志库使用笔记

    日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活. 在Github上下载glog,解压 ...

  6. How To Use Google Logging Library (glog)

    文章转自:http://www.cnblogs.com/lexus/archive/2012/10/29/2744595.html 版权归原作者. Introduction Google glog i ...

  7. SLAM本质剖析-Boost

    0. 简介 在深入剖析了Ceres.Eigen.Sophus.G2O后,以V-SLAM为代表的计算方式基本已经全部讲完.就L-SLAM而言,本系列也讲述了PCL.Open3D.与GTSAM点云计算部分 ...

  8. google glog介绍与使用

    [前言] 本文简介了glog及其使用方法,转载自轻典的文章glog . 一.安装配置 1.简介 google 出的一个C++轻量级日志库,支持以下功能: ◆ 参数设置,以命令行参数的方式设置标志参数来 ...

  9. glog使用与说明(转载)

    原文地址:https://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html 一.安装配置 1.1简介 google 出的一个C+ ...

最新文章

  1. 分类算法之贝叶斯网络(Bayesian networks)
  2. 网络营销外包专员浅析网络营销外包站内关键词优化技巧(不外传)
  3. Gearman 异步处理委派任务
  4. Swift:如何判断一个对象是否是某个类(或其子类)的实例
  5. 51php 数据不同步,php避免循环查询数据库优化一对多查询
  6. xpose修改手机imei码,注入广告
  7. Flutter游戏:启动时的欢迎页
  8. building for production...Killed
  9. redis客户端分析
  10. N卡A卡流处理器的区别解析
  11. 【元胞自动机】基于元胞自动机实现艺术图像处理附matlab代码
  12. IPIP.net状告阿里云抄袭侵权
  13. Antv F2双柱状图和折线图的混合写法
  14. 计算机组装与维修论文摘要,计算机组装与维护—本科毕业设计论文摘要.doc
  15. 8.1 linux基础,创建用户
  16. 呼叫中心电话系统怎么搭建?能用到哪些智能应用?
  17. 如何快速提高网站用户体验之3大绝招:快、准、狠
  18. 全程无尿点,死磕前端~
  19. 关于isEmpty(),null,“”的理解
  20. 基于战舰V3的4.3寸电容触摸屏

热门文章

  1. BOSHIDA 模块电源的分类(二)
  2. IOS 绘制基本图形(画文字、图片水印)
  3. 如何搭建自己的Teamspeak服务器?(Windows)
  4. tp-link设置为中继模式
  5. 237. 删除链表中的节点【我亦无他唯手熟尔】
  6. Excel制作表格的小技巧
  7. 32k*16 薪,4 轮拿下腾讯 Offer !(附真题)
  8. 14.Linux rpm,brew软件安装包命令,zsh和bash,内置命令和外部命令,ps命令,top命令解析,swp,为什么cpu利用率很低,负载却很高?
  9. ESP8266墨水屏
  10. 新晋总监生存指南开篇之总监二三事