google glog 入门

1.简介

Google Glog是Google的一个开源库,用于实现应用级别的logging。 它提供了一系列类似于C++流风格的logging API,以及一些预定义的宏。它有点类似于C里面的assert,但是比它具备更丰富的输出信息以及使用灵活性。

1.日志级别

INFO, WARNING, ERROR, FATAL、分别对应数字

0, 1, 2, 3

对应级别的日志打印在对应级别的日志文件中。

并且高级别的日志同时打印在本级别和低级别中。

例如 INFO中会有WARNING级别的输出。

2.日志文件

默认输出在“/tmp/”目录下,修改输出目录方法:

  • FLAGS_log_dir值修改
  • google::ParseCommandLineFlags(&argc, &argv, true); 使用时,命令行参数log_dir设置。

日志文件名称格式:<program name>.<hostname>.<user name>.log.<severity level>.<date>.<time>.<pid>

例如:hello_world.example.com.hamaji.log.INFO.20080709-222411.10474

本文开始处的例子中的 google::InitGoogleLogging(argv[0]); 参数便为设置程序名称。

3.初始化参数

FLAGS_log_dir       日志输出目录

FLAGS_v                 自定义VLOG(m)时,m值小于此处设置值的语句才有输出

FLAGS_max_log_size     每个日志文件最大大小(MB级别)

FLAGS_minloglevel       输出日志的最小级别,即高于等于该级别的日志都将输出。

4.条件日志

有时候需要在满足一定条件下,才进行log操作,因此glog提供了如下了宏来满足实际需求。

  • LOG_IF(INFO, Condition expression) :只有当条件表达式成立时,才会输出log信息。
  • LOG_EVERY_N(INFO, interval) :当这条log语句被执行了1次,(1+interval)次,(1 + 2 * interval)次……才会输出和记录log信息。
  • LOG_IF_EVERY_N(INFO, Condition, interval):只有当满足条件表达式时,才按照interval间隔来输出和记录log信息。
  • LOG_FIRST(INFO, nums):记录前面nums次执行的log信息。

2.编译安装

在Google的Glog项目主页上下载相关的源码,并编译安装。

2.入门实例

// 1.cpp
#include <glog/logging.h>
#include <string>
#include <vector>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>

#define LOGDIR "/home/vslam/learning/glog_test/log"
#define MKDIR "mkdir -p "LOGDIR

//将信息输出到单独的文件和 LOG(ERROR)
void waiter(const char* data, int size)
{
	std::string str = std::string(data,size);
	std::ofstream fs(LOGDIR"glog_dump.log",std::ios::app);
	fs<<str;
	fs.close();
	LOG(ERROR)<<str;
}

bool glogInit()
{
	system(MKDIR);
	google::InitGoogleLogging("");
	#define DEBUG_MODE
	#ifdef DEBUG_MODE
	google::SetStderrLogging(google::GLOG_INFO); //设置级别高于 GOOGLE_NAMESPACE::INFO 的日志同时输出到屏幕
	#else
	GOOGLE_NAMESPACE::SetStderrLogging(GOOGLE_NAMESPACE::GLOG_FATAL);//设置级别高于 GOOGLE_NAMESPACE::FATAL 的日志同时输出到屏幕
	#endif
	FLAGS_colorlogtostderr = true; //设置输出到屏幕的日志显示相应颜色
	//FLAGS_servitysinglelog = true;// 用来按照等级区分log文件</span>
	google::SetLogDestination(google::GLOG_FATAL, LOGDIR"/FATAL_"); // 设置 GOOGLE_NAMESPACE::FATAL 级别的日志存储路径和文件名前缀
	google::SetLogDestination(google::GLOG_ERROR, LOGDIR"/ERROR_"); //设置 GOOGLE_NAMESPACE::ERROR 级别的日志存储路径和文件名前缀
	google::SetLogDestination(google::GLOG_WARNING, LOGDIR"/WARNING_"); //设置 GOOGLE_NAMESPACE::WARNING 级别的日志存储路径和文件名前缀
	google::SetLogDestination(google::GLOG_INFO, LOGDIR"/INFO_"); //设置 GOOGLE_NAMESPACE::INFO 级别的日志存储路径和文件名前缀
	FLAGS_logbufsecs = 0; //缓冲日志输出,默认为30秒,此处改为立即输出
	FLAGS_max_log_size = 5; //最大日志大小为 5MB
	FLAGS_stop_logging_if_full_disk = true; //当磁盘被写满时,停止日志输出
	//GOOGLE_NAMESPACE::SetLogFilenameExtension("91_"); //设置文件名扩展,如平台?或其它需要区分的信息
	google::InstallFailureSignalHandler(); //捕捉 core dumped (linux)
	google::InstallFailureWriter(waiter); //默认捕捉 SIGSEGV 信号信息输出会输出到 stderr 

    return true;
}


int main(int argc, char *argv[])
{
    //google::InitGoogleLogging(argv[0]);
 glogInit();

    //google::SetLogDestination(google::INFO, "log/"); // 把日志同时记录文件,最低级别为INFO

    // 通过GFLAGS来设置参数,更多选项可以在logging.cc里面查询
    // 日志等级分为INFO, WARNING, ERROR, FATAL,如果是FATAL级别这直接运行报错
    FLAGS_stderrthreshold = google::WARNING;
    FLAGS_colorlogtostderr = true;

    FLAGS_log_dir = "./log";  

    LOG(WARNING) << "Hello GLOG";
    // 条件输出
    LOG_IF(INFO, 20 > 10) << "20 > 10";
    // 频率输出,本质上是通过google::COUNTER这个计数机实现的
    for (int i = 0; i < 10; i++)
    {
        LOG_EVERY_N(ERROR, 3) << "每隔3次输出一次 " << i;
        LOG_FIRST_N(ERROR, 2) << "前两次输出 " << i;
        LOG_IF_EVERY_N(WARNING, 1 < 2, 2) << "条件输出+频率" << google::COUNTER;
    }
    google::ShutdownGoogleLogging();
}

 

CMakeLists 

cmake_minimum_required(VERSION  2.8)
project(glog_test)

find_package(glog)

add_executable(main main.cpp)
target_link_libraries(main glog)

结果为:

参考:

1.http://rpg.ifi.uzh.ch/docs/glog.html

2.http://www.voidcn.com/article/p-xhhvtrti-bdk.html

3.https://www.cnblogs.com/hiloves/p/6009707.html

4.https://zhuanlan.zhihu.com/p/26025722

5.https://www.xuebuyuan.com/3208022.html

6.google-glog 开源库分析(一):glog介绍 - 天使的秘密
http://www.cnblogs.com/davidyang2415/p/3861109.html
google-glog 开源库分析(二):glog用法 - 天使的秘密
http://www.cnblogs.com/davidyang2415/p/3861112.html
google-glog 开源库分析(三):glog核心类结构 - 天使的秘密
http://www.cnblogs.com/davidyang2415/p/3861118.html
google-glog 开源库分析(四):glog宏技巧 - 天使的秘密
http://www.cnblogs.com/davidyang2415/p/3861120.html
C++的开源跨平台日志库glog学习研究(一) - lizhenghn
http://www.cnblogs.com/lizhenghn/p/3704749.html
C++的开源跨平台日志库glog学习研究(二)--宏的使用 - lizhenghn
http://www.cnblogs.com/lizhenghn/archive/2014/05/03/3705410.html
C++的开源跨平台日志库glog学习研究(三)--杂项 - lizhenghn
http://www.cnblogs.com/lizhenghn/p/3720508.html
如何使用Google日志库 (glog) - chenguangxing3的专栏
http://blog.csdn.net/chenguangxing3/article/details/17150069
glog使用与功能修改
http://www.cppfans.org/1566.html
glog多线程下按照指定条件创建新的日志文件 - lijingpeng的专栏
http://blog.csdn.net/lijingpengchina/article/details/9050539
window环境下glog的安装 - lijingpeng的专栏
http://blog.csdn.net/lijingpengchina/article/details/9047777


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值