Caffe阅读之Glog

  Google Glog是一个C++语言的应用级日志记录框架,提供了C++风格的流操作和各种助手宏。

头文件:

#include <glog/logging.h>

设置日志文件保存目录,这个目录必须是已经存在的:

FLAGS_log_dir = "c:\\Logs";

使用glog之前需要先初始化库,在生成日志文件之前,即开始log之前:

google::InitGoogleLogging(argv[0]);  //括号内是程序名

在结束glog时,必须要关闭库,否则会内存溢出:

google::ShutdownGoogleLogging();

glog的四个错误级别

enum SeverityLevel
{
  google::INFO = 0,
  google::WARNING = 1,
  google::ERROR = 2,
  google::FATAL = 3,
};

输出日志:

LOG(INFO) << "info test";  //输出一个Info日志
LOG(WARNING) << "warning test";  //输出一个Warning日志
LOG(ERROR) << "error test";  //输出一个Error日志
LOG(FATAL) << "fatal test";  //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序

条件输出:

LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";	//当条件满足时输出日志

LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTEER << "th cookie"; //google::COUNTEER 记录该语句被执行的次数,从1开始,在第一次运行输出日志之后,每隔10次再输出一次日志信息

LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTERE << "th big cookie";//上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果是则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息

LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";  //当此语句执行的前 20 次都输出日志,然后不再输出

几个函数:

google::SetLogDestination(google::GLOG_INFO, "log/prefix_");  //设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀

google::SetLogFilenameExtension("logExtension");  //在日志文件名中级别后添加一个扩展名。适用于所有严重级别

google::SetStderrLogging(google::GLOG_INFO);  //大于指定级别的日志都输出到标准输出

有条件地终止程序— Check 宏
  glog提供CHEECK宏,用于在调试时终止程序,以及早发现程序的错误。当通过该宏指定的条件不成立的时候,程序会终止,并记录对应的日志信息。功能类似于ASSERT,区别是CHECK宏不受NDEBUG约束,在releasee版中也有效。若条件成立,则输出NULL,即不记录任何信息。

  使用如下:

CHECK(fp->Write(x) == 4) << "Write failed!";

当条件不成立的时候,记录“Write failed!”日志信息,并终止程序。

Glog提供了多个宏来处理特定关系的判定:

  1. 判断大小关系:CHECK_EQ,CHECK_NE,CHECK_LE,CHECK_LT,CHECK_GE,CHECK_GT。使用这些宏需要注意类型的一致。
  2. 判定指针是否为空:CHECK_NOTNULL(some_ptr)
  3. 判断字符串是否相等:CHECK_STREQ, CHECK_STRNE, CHECK_STRCASEEQ, CHECK_STRCASENE。这两组是在判断时是否大小写敏感。
  4. 判断浮点数是否相等或相近:CHECK_DOUBLE_EQ,CHECK_NEAR。这两个宏都需要制定一个可容忍的偏差上限。

*这里给出CHECK_的定义

#define CHECK_EQ(x,y) CHECK_OP(x,y,EQ,==)
#define CHECK_NE(x,y) CHECK_OP(x,y,NE,!=)
#define CHECK_LE(x,y) CHECK_OP(x,y,LE,<=)
#define CHECK_LT(x,y) CHECK_OP(x,y,LT,<)
#define CHECK_GE(x,y) CHECK_OP(x,y,GE,>=)
#define CHECK_GT(x,y) CHECK_OP(x,y,GT,>)

至于CHECK_OP()就是另外的宏定义了。

CHECK宏就是不满足条件的时候,输出信息,并终止程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值