glog 入门简介 foreveryl 博客园

摘要:
制作简单示例main.cpp:LOG(INFO)&lt//打印日志;主要的o g++-o$@$^-L$(LIB)-lglog–lpthread#-lpthread由于glog在多个线程中需要一些锁定机制:默认情况下,glog在/tmp/目录中生成日志文件:InitGoogleLogging参数可以修改日志文件的名称:

glog 入门简介 - foreveryl - 博客园


    foreveryl

    glog 入门简介

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

    

    0,  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(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的信息会同时记录在INFO,WARNING,ERROR,FATAL日志文件中。默认情况下,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, 精简日志字符串信息。

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

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

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

    

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

免责声明:文章转载自《glog 入门简介 foreveryl 博客园》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server日期与字符串之间的转换ES操作整理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一文带你搞定AOP切面

摘要:AOP在spring中又叫“面向切面编程”,是对传统我们面向对象编程的一个补充,主要操作对象就是“切面”,可以简单的理解它是贯穿于方法之中,在方法执行前、执行时、执行后、返回值后、异常后要执行的操作。 本文分享自华为云社区《一篇文搞懂《AOP面向切面编程》是一种什么样的体验?》,作者: 灰小猿。 一、什么是Spring的AOP? AOP在sprin...

查询语句有 or 会导致查询速度变慢问题解决

先上查询语句 select u.c_user_id 用户编号, u.c_old_user_id 旧编号, u.c_user_name 用户名称, u.c_user_address 用户地址, 日志说明 日志说明, 操作人 操作人,...

mysql学习笔记(三)----函数

Mysql函数 数学函数 函数名 描述 Eg ABS(X) 绝对值 Select ABS(-2); PI() 圆周率 Select PI(); SQRT(X) 平方根 Select sqrt(X); MOD(X,Y) 求余 Select mod(4,3); CEIL(X) 返回不小于X的最小整数 Select ceil(3.5);...

Deepfakes教程及各个换脸软件下载

源:https://blog.csdn.net/koest/article/details/80720078 Deepfakes目前用于深度换脸的程序基本都是用python编程语言基于tensorflow进行计算。以下列出几款常用的换脸程序优缺点浅析,用户可以根据自己的爱好和水平来选择,以下软件均需要先安装windows 版本的 VS2015,CUDA9....

LINUX内核分析第四周——扒开系统调用的三层皮

LINUX内核分析第四周——扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一、用户态、内核态和中断处理过程 1. 用户态和内核态 CPU指令执行级别: 执行特权指令,访问任意的物理地址——内核态。 低级别:代...

kafka 基础知识梳理-kafka是一种高吞吐量的分布式发布订阅消息系统

一、kafka 简介 今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时做到如上两点 以上几个挑战形成了一个业务需求模型,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,需要...