glog简介:

google 出的一个C++轻量级日志库,支持以下功能:

◆ 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;
◆ 严重性分级,根据日志严重性分级记录日志;
◆ 可有条件地记录日志信息;
◆ 条件中止程序。丰富的条件判定宏,可预设程序终止条件;
◆ 异常信号处理。程序异常情况,可自定义异常处理过程;
◆ 支持debug功能;
◆ 自定义日志信息;
◆ 线程安全日志记录方式;
◆ 系统级日志记录;
◆ google perror风格日志信息;
◆ 精简日志字符串信息

安装:
https://github.com/google/glog

使用:

linux:
./configure --preifx=mypath
make
make install

写个编译该cpp文件的shell脚本,如下(这里使用静态链接方式):

#! /bin/sh

LIB_DIR='mypath/glog/lib/libglog.a'
INCLUDE_DIR='mypath/glog/include/'
g++ -g test.cpp $LIB_DIR -I$INCLUDE_DIR -lpthread -o test
./test

# 以上脚本有两点值得注意:
1、要加-lpthread 
2、要保证test.cpp放在ligglog.a路径的前面

windows:

使用vs打开glog.sln直接编译。
将glog/src 和 使用的库放进代码中。

加入signalhandler.cc到libglog的源文件中。否则无法追堆栈信息。

文档:

在doc里面

使用说明以及DEMO:

//定义日志文件输出目录
FLAGS_log_dir = "c:\\GLogFiles"; 
//调用这一句会产生日志文件
google::InitGoogleLogging("abc.exe");
//与上一句成对使用
google::ShutdownGoogleLogging();

//线程安全日志记录
glog提供了线程安全的日志记录方式。
在<glog/raw_logging.h>文件中提供了相关的宏,
如,RAW_CHECK,RAW_LOG等。
这些宏的功能与CHECK,LOG等一致,

//日志分级

日志信息严重性等级按由低到高排列依次为:
enum SeverityLevel
{
  google::INFO = 0,
  google::WARNING = 1,
  google::ERROR = 2,
  google::FATAL = 3,
};

//运行参数
FLAGS_stderrthreshold=google::INFO;
FLAGS_colorlogtostderr=true;

//DEBUG模式支持
DEBUG模式日志输出形式,增加前缀D表示DEBUG模式日志,如DLOG(log_severity),DLOG_IF(log_severity,condition)
采用DEBUG宏控制,非DEBUG模式中DEBUG日志不会编译进程序就避免了程序冗余

//条件输出
LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";   //当条件满足时输出日志
LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";  //google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息
LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER << "th big cookie";  //上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息。
LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";  //当此语句执行的前 20 次都输出日志,然后不再输出

条件宏:
LOG_IF(condition)
计数宏:
LOG_EVERY_N(log_severity,num)
LOG_IF_EVERY_N(log_severity,condition,num)
LOG_FIRST_N(log_severity,num)
使用google::COUNTER计数
验证宏:
功能类似assert断言,但不受DEBUG模式控制即非DEBUG模式也生效
如果验证失败,会写FATAL日志并终止程序运行
CHECK(condition)
比较验证:
CHECK_EQ(arg1,arg2)
CHECK_NE(arg1,arg2)
CHECK_LE(arg1,arg2)
CHECK_LT(arg1,arg2)
CHECK_GE(arg1,arg2)
CHECK_GT(arg1,arg2)
CHECK_NOTNULL(arg)
字符串比较:
CHECK_STREQ
CHECK_STRNE
CHECK_STRCASEEQ
CHECK_STRCASENE
浮点数验证:
CHECK_DOUBLE_EQ
CHECK_NEAR
其中CHECK_NOTNULL不能作为日志输出流使用
比较验证中,在输出中会输出比较值,所以要求比较值重载了输出操作符(operator<<(ostream,...))
在验证宏中,参数会是匿名参数如CHECK(string("abc")[1],'b')

//CHECK宏
当通过该宏指定的条件不成立的时候,程序会中止,并且记录对应的日志信息。功能类似于ASSERT,区别是 CHECK 宏不受 NDEBUG 约束,在 release 版中同样有效。
CHECK(port == 80)<<"HTTP port 80 is not exit.";

//core dumped 
通过 google::InstallFailureSignalHandler(); 即可注册

//自定义输出方式:
//将信息输出到单独的文件和 LOG(ERROR)
void SignalHandle(const char* data, int size)
{
std::ofstream fs("glog_dump.log",std::ios::app);
std::string str = std::string(data,size);
fs<<str;
fs.close();
LOG(ERROR)<<str;
}
google::InstallFailureWriter(&SignalHandle);

//常用配置

google::SetLogDestination(google::ERROR,"log/prefix_"); //第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀。
google::SetStderrLogging(google::INFO);   //输出到标准输出的时候大于 INFO 级别的都输出;等同于 FLAGS_stderrthreshold=google::INFO;
FLAGS_logbufsecs =0;   //实时输出日志
FLAGS_max_log_size =100;   //最大日志大小(MB)
#define GOOGLE_STRIP_LOG 3 // 小于此级别的日志语句将在编译时清除,以减小编译后的文件大小,必须放在 #include 前面才有效。

//简单封装

//
// create by mqd at 2017 01 18
//

#include "glog/logging.h"
#include "glog/raw_logging.h"
#include <string>

class GLogHelper
{
public:

explicit GLogHelper(const char* program, const char* dir);
~GLogHelper();
private:

static void SignalHandle(const char* data, int size){
std::string str = std::string(data, size);
LOG(ERROR) << str;
}
};

GLogHelper::GLogHelper(const char* program, const char* dir){

#ifdef _WIN32
system("md log");
#else
system("mkdir log");
#endif // _WIN32

std::string tempdir = dir;
google::InitGoogleLogging(program);

FLAGS_colorlogtostderr = true;
google::SetStderrLogging(google::INFO);
google::SetLogDestination(google::INFO, (tempdir + std::string("/INFO_")).c_str()); 
google::SetLogDestination(google::WARNING, (tempdir + std::string("/WARNING_")).c_str());
google::SetLogDestination(google::ERROR, (tempdir + std::string("/ERROR_")).c_str());

FLAGS_logbufsecs = 0; //缓冲日志输出,默认为30秒,此处改为立即输出
FLAGS_max_log_size = 100; //最大日志大小为 100MB
FLAGS_stop_logging_if_full_disk = true; //当磁盘被写满时,停止日志输出

#ifndef _WIN32
google::InstallFailureSignalHandler(); //捕捉 core dumped
google::InstallFailureWriter(&SignalHandle); //默认捕捉 SIGSEGV 信号信息输出会输出到 stderr,
#endif // !_WIN32

}
//GLOG内存清理:
GLogHelper::~GLogHelper(){
google::FlushLogFiles(google::INFO);
//关闭日志库 也会删除日志文件
//google::ShutdownGoogleLogging();
}

int main() {
GLogHelper("lalal","log");
LOG(WARNING) << "我在InitInstance()";
LOG(INFO) << "Found " << 1 << " cookies";
}

本文参考:http://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html 

Google/glog相关推荐

  1. 【C++】google glog详解

    0.简介 glog是google的日志管理系统,配合gflags库,通过命令行参数管理日志. 源码下载:https://github.com/google/glog ubuntu安装: sudo ap ...

  2. Google Glog使用

    Glog是Google的一个C++开源日志系统,轻巧灵活,入门简单,而且功能也比较完善. 安装 以下是官方的安装方法 git clone https://github.com/google/glog. ...

  3. 在windows下基于visual studio2017和CMake的安装Google glog

    这里简单记录安装google glog在windows下基于visual studio2017的安装过程. 下载 https://github.com/google/glog 使用cmake编译,编译 ...

  4. google glog使用指南

    Google Logging (glog) 是一个 C++98 库,用于实现应用程序级日志记录.该库提供了基于 C++ 风格流和各种帮助宏的日志 API. 入门 您可以通过简单地将内容流式传输到LOG ...

  5. Google glog

    本文是根据自己的理解翻译组织了glog的manual,鉴于自身的理解能力和英语水平,可能存在谬误,欢迎大家指出!英文原文见 http://google-glog.googlecode.com/svn/ ...

  6. caffe中LOG(INFO) DLOG(INFO)介绍(统称Google glog)

    Original url: http://blog.51cto.com/mengjh/546766    本文是根据自己的理解翻译组织了glog的manual,鉴于自身的理解能力和英语水平,可能存在谬 ...

  7. Google glog 使用

    Google glog 使用 1        简介 Googleglog 库实现了应用级的日志记录,提供了C++ 风格的流操作和各种助手宏. 代码示例: #include <glog/logg ...

  8. google glog简介

    本文是根据自己的理解翻译组织了glog的manual,鉴于自身的理解能力和英语水平,可能存在谬误,欢迎大家指出!英文原文见 http://google-glog.googlecode.com/svn/ ...

  9. google/glog 使用

    1 安装 $sudo apt-get install libgoogle-glog-dev 2 使用 //将信息输出到单独的文件和 LOG(ERROR) #include <glog/loggi ...

最新文章

  1. mysql恢复数据的步骤_MySQL备份恢复数据的一般步骤
  2. 十六、curator recipes之DistributedIdQueue
  3. 如何在openbsd 5.1-5.3上部署open*** 服务器?
  4. 网络安全比赛理论答题(五)
  5. docker容器间数据共享
  6. (寒假CF)Choosing Symbol Pairs
  7. mysql添加外键的时候报错_mysql处理添加外键时 error 150 问题
  8. JBoss BRMS复杂事件处理(CEP)性能基准
  9. 百万用户规模的系统如何扩展
  10. 【知识连载】 如何用钉钉宜搭制定企业疫情防控数字化管理方案
  11. [USACO13OPEN]Fuel Economy【贪心】
  12. ShiftViT用Swin Transformer的精度跑赢ResNet的速度,论述ViT的成功不在注意力!
  13. 原生Hadoop集群搭建过程记录
  14. git merge 暂存区_经典好文:一篇文章,教你学会Git
  15. 关于ACM竞赛的题型分析
  16. python deap_看完必会的 python DEAP遗传算法库讲解+实战(中级)
  17. NP完全问题贪婪算法
  18. WINDOWS SERVER 2003禁用U盘
  19. latex中report目录_LaTeX提纲
  20. 数据链路层概述(主要解决的三个问题)

热门文章

  1. win10版本查看_不知道电脑上安装的win10版本,这样操作可以轻松查看
  2. Wiring in Spring: @Autowired, @Resource and @Inject 三种注解实现依赖注入
  3. 基于MATLAB的图像平滑滤波降噪(去噪)系统(通信毕业设计)(中值滤波,维纳滤波,小波降噪,均值滤波,椒盐噪声)
  4. 微信朋友圈闪退代码是什么?微信朋友圈闪退代码使用方法
  5. 张洪斌 html css,网页设计与制作张洪斌 刘万辉体设计.doc
  6. 彩虹代shua网仿小储云的模板 提前备份好数据
  7. 安装win7+ubuntu14.04双系统以及各种软件安装
  8. c++ 箭头符号怎么打_C++语言中的标识符只能由字母、数字、下划线三种字符组成,且第一个字符_____。...
  9. 1024程序员节,有的公司竟然送漱口水!
  10. 【OpenSea 创始人访谈录】听OpenSea 创始人谈 NFT 市场爆炸式增长的秘密