如何安装
glog 是一个 C++ 日志库,它提供 C++ 流式风格的 API。在安装 glog 之前需要先安装 gflags,这样 glog 就可以使用 gflags 去解析命令行参数(可以参见 gflags 安装教程)。下面是 glog 的安装步骤:
安装之后要怎么使用 glog 呢?如果程序是使用 CMake 构建的,那么只要在 CMakeListsx.txt 里面加上下面几行配置就可以了:
日志级别
glog 支持四种日志级别,INFO、WARNING、ERROR和FATAL。默认情况下,在打印完FATAL日志之后,程序将会终止。ERROR和FATAL的日志除了会写到日志中,还会输出到 stderr。
日志配置
默认情况下,glog 会将日志输出到 /tmp 目录下,日志文件命名格式为:
那么要怎样改变日志的目录呢?可以通过命令行 flag log_dir指定日志目录,例如:
glog 还支持其它的命令行 flag:
logtostderr将日志输出到 stderr,不输出到日志文件,默认值是 false。minloglevel如果程序输出的日志的级别大于或等于这个值,那么日志就会被记录下来,它的默认值是 0,代表INFO(1 代表WARNING,2 代表ERROR,而 3 代表FATAL)。
调试模式
一种常见的调试手段就是使用 debug 日志,在调试模式下 (也即没有开启NDEBUG),可以使用DLOG()来输出 debug 日志,例如:
检查程序错误
glog 提供了CHECK()宏帮助我们检查程序的错误,当CHECK()的条件不满足时,它会记录FATAL日志并终止程序:
与assert()不同的是,无论程序是否开启NODEBUG,CHECK()都会执行。除了CHECK(),glog 还提供其它的宏,包括CHECK_EQ()、CHECK_NE()、CHECK_LE()、CHECK_LT()、CHECK_GE()和CHECK_GT()。
在判断指针是否为NULL时,需要注意先将NULL转换成为相应的类型,然后再进行比较:
glog 还提供了其它宏用来检查char *类型的字符串,包括CHECK_STREQ()、CHECK_STRNE()、CHECK_STRCASEEQ()和CHECK_STRCASENE(),带有 CASE 的版本表示大小写不敏感的。传递NULL值给这些宏是安全的。
另外,可以使用CHECK_DOUBLE_EQ()检查两个浮点数是否相等,允许出现比较小的误差。如果需要自己提供可以接受的误差范围,可以使用CHECK_NEAR(),它的第三个参数为用户指定的误差范围。