一、安装配置
1、简介
google 出的一个C++轻量级日志库,支持以下功能:
◆ 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;
◆ 严重性分级,根据日志严重性分级记录日志;
◆ 可有条件地记录日志信息;
◆ 条件中止程序。丰富的条件判定宏,可预设程序终止条件;
◆ 异常信号处理。程序异常情况,可自定义异常处理过程;
◆ 支持debug功能;
◆ 自定义日志信息;
◆ 线程安全日志记录方式;
◆ 系统级日志记录;
◆ google perror风格日志信息;
◆ 精简日志字符串信息
2、安装
下载地址:
https://code.google.com/p/google-glog/downloads/list
解压安装:
tar zxvf glog-0.3.3.tar.gz && cd glog-0.3.3 && ./configure && make
头文件目录为 /src/glog ,链接库为 .libs/libglog.{a,so}
帮助文档为 doc/glog.html 或直接访问以下 URL:
http://google-glog.googlecode.com/svn/trunk/doc/glog.html
3、简单 Demo
#include <glog/logging.h> int main(int argc,char* argv[]) { LOG(INFO) << "Hello,GLOG!"; }
链接时,需要 -lglog ,也可能会需要 -lunwind -lpthread (有一次遇到的,记不起来了,一般不需要)
执行时,可使用 ./glogdemo 将日志输出到 stderr,可使用 valgrind 检测,未发现内存泄漏。
二、使用方法
1、错误级别
GLOG 有四个错误级别,枚举如下:
enum SeverityLevel { google::INFO = 0, google::WARNING = 1, google::ERROR = 2, google::FATAL = 3, };
2、Flags 设置:
在上面的简单 Demo 中,只能将日志输出到 stderr ,如果想将日志重定向到文件,需要:
google::InitGoogleLogging(argv[0]); /* GLOG代码 */ google::ShutdownGoogleLogging();
则默认运行会将日志输出到 /tmp 目录下(格式为 "<program name>.<hostname>.<user name>.log.<severity level>.<date>.<time>.<pid>"),也可以使用设置临时环境变量的方式(给命令行参数加上 GLOG_ 前缀),如 GLOG_logtostderr=1 ./your_application 将日志输出到 stderr。
另外,glog 使用了 gflags 库,如果已经安装好了 gflags 库(./configure && make && make install 然后再配置编译GLOG库)还可以通过 ./your_application --logtostderr=1 来指定运行参数,但需要在使用时加上如下代码:(详见 http://www.cnblogs.com/tianyajuanke/p/3467572.html)
google::ParseCommandLineFlags(&argc, &argv, true); /* GLOG代码 */ google::ShutDownCommandLineFlags();
但此方法会使 valgrind 检测有内存泄漏(截止 valgrind 3.9.0 依然如此),这是由于使用 gflags 库造成的。(即使不使用此方法,但只要在编译 glog 库之前安装好了 gflags 库,就会使 libglog.so 有内存泄漏,介意者可进入 gflags 目录 make uninstall 之后,再对 glog 进行 ./configure && make )。
常用的运行参数如下:
logtostderr (bool, default=false) //是否将所有日志输出到 stderr,而非文件 alsologtostderr(bool,default=false) //是否同时将日志输出到文件和stderr minloglevel (int, default=google::INFO) //限制输出到 stderr 的部分信息,包括此错误级别和更高错误级别的日志信息 stderrthreshold (int, default=google::ERROR) //除了将日志输出到文件之外,还将此错误级别和更高错误级别的日志同时输出到 stderr,这个只能使用 -stderrthreshold=1 或代码中设置,而不能使用环境变量的形式。(这个参数可以替代上面两个参数) colorlogtostderr(bool, default=false) //将输出到 stderr 上的错误日志显示相应的颜色 v (int, default=0) //只记录此错误级别和更高错误级别的 VLOG 日志信息 log_dir (string, default="") //