glog 入门教程

glog的简单入门,glog虽然在配置参数方面比较麻烦,但是在小规模程序中,由于其简单灵活,也许会有优势。

glog google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善。 结合之前看的一些资料, 这里简单对其做个简介。

 

1, 安装:

最新版本:0.3.1  http://code.google.com/p/google-glog/

安装只需:./configure; make; make install

 

2, 简单示例

main.cpp:

#include <iostream>

#include "glog/logging.h"   // glog 头文件

using namespace std;

int main(int argc, char** argv) {

  google::InitGoogleLogging(argv[0]);    // 初始化

  // FLAGS_log_dir=".";   //设置log目录

  LOG(INFO) << "hello glog";     // 打印log“hello glog.  类似于C++ stream

}

Makefile:

LIB=$(HOME)/install/glog/lib    #glog 安装路径

INCLUDE=$(HOME)/install/glog/include

test_glog : main.o

        g++ -o $@ $^ -L$(LIB) -lglog –lpthread   #-lpthread 因为glog在多线程中需要一些锁机制。

main.o: main.cpp

        g++ -c -o $@ $^ -I$(INCLUDE)

说明:

glog 默认对log分为4级: INFO,  WARNING,  ERROR,  FATAL.  打印log语句类似于C++中的stream,实际上LOG(INFO) 宏返回的是一个继承自std::ostrstream类的对象。

编译运行上述demo glog默认会在/tmp/目录下生成log日志文件test_glog.search-x2.username.log.INFO.20111003-161341.2083

文件名各字段对应含义为:

<program name>.<hostname>.<user name>.log.<severity level>.<date>.<time>.<pid>

其中:

1),<program name> 其实对应google::InitGoogleLogging(argv[0]);中的argv[0],即通过改变google::InitGoogleLogging的参数可以修改日志文件的名称。

2),每个级别的日志会输出到不同的文件中。并且高级别日志文件会同样输入到低级别的日志文件中。 即:FATAL的信息会同时记录在INFOWARNINGERRORFATAL日志文件中。默认情况下,glog还会将会将FATAL的日志发送到stderr中。

 

现在的问题是:log总不能都打印到/tmp/目录下吧。下面的小结来解决:

 

3, 参数设置:

不同于log4系列的日志系统通过配置文件的方式, glog采用命令的方式来来配置参数。在glog的官方文档里,提到如下两种方式来配置参数(以修改日志目录为例:)

1),gflags

./your_application --log_dir=.

gflags 我还没有使用过)

2),export 修改环境变量,如下所示:修改GLOG_log_dir为上层目录

 

3)以上两种方法都需要使用命令行,除此之外,还可以直接在程序中指定(官方文档中没有提到, glog源代码中也不鼓励这么用,但确实是可行的):

glog/logging.h 头文件287---350行,有诸如“GLOG_log_dir”等变量的宏定义, 则其GLOG_log_dir实际为FLAGS_log_dir,  因此只需要在程序中设置FLAGS_log_dir的值即可。其他变量类似。取消main.cpp中的注释行“// FLAGS_log_dir=".";  试试吧

 

4,  glog 支持功能列表如下

1 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;

2 严重性分级,根据日志严重性分级记录日志;

3 可有条件地记录日志信息;

4 条件中止程序。丰富的条件判定宏,可预设程序终止条件;

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

6 支持debug功能。可只用于debug模式;

7 自定义日志信息;

8 线程安全日志记录方式;

9 系统级日志记录;

10 google perror风格日志信息;

11 精简日志字符串信息。

功能点12demo实例。 其他功能见在如下链接讲的简单明了,在此也不一一细说:

1)官方文档(英文): http://google-glog.googlecode.com/svn/trunk/doc/glog.html#verbose

2)有网友的中文翻译:http://mengjh.blog.51cto.com/2860827/546766

 

5,  总结glog简单易用,缺点感觉还是配置参数不如log4系列使用配置文件来的方便。在小规模程序(单元测试?功能点自测)中使用,应该是个不错的选择吧。



附:

1、简介
     glog 是google的开源日志系统,本质上是一个程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例如:

  
  
  
  
  1. LOG(INFO) << "Hello Glog"

2、安装
    下载连接:http://code.google.com/p/google-glog/
    安装:
./configure && make && make install
3、日志严重等级
      glog可通过根据指定的严重性等级,来选择性记录日志。日志信息严重性等级按由低到高排列依次为:INFO, WARNING, ERROR, 和 FATAL四级。使用者可以在命令行中设置严重性等级门限值来控制日志的输出。

4、编程试用
  
  
  
  
  1. #include<iostream>   
  2. #include<stdlib.h>   
  3. #include<stdio.h>   
  4. #include<string>   
  5.    
  6. //glog   
  7. #include<glog/logging.h>   
  8. using namespace std;   
  9.    
  10. int main()   
  11. {   
  12.     // HOME_PATH   
  13.     string home = "./log/";  //要先创建此目录,否则运行报错.
  14.     //glog init   
  15.     google::InitGoogleLogging(argv[0]);   
  16.     string info_log = home + "master_info_";   
  17.     google::SetLogDestination(google::INFO, info_log.c_str());   
  18.     string warning_log = home + "master_warning_";   
  19.     google::SetLogDestination(google::WARNING, warning_log.c_str());   
  20.     string error_log = home + "master_error_";   
  21.     google::SetLogDestination(google::ERROR, error_log.c_str());   
  22.     string fatal_log = home + "master_fatal_";   
  23.     google::SetLogDestination(google::FATAL, fatal_log.c_str());   
  24.       
  25.     LOG(INFO)<<"Hello Glog";  
  26.     return 0;   
  27. }   

5、编译:假设源文件命名为a.cpp
        g++ a.cpp -o a -lglog -lpthread

你可能感兴趣的:(glog 入门教程)