上一篇中,我讲了关于如何生成库的方法,那么这一节我们一起看看如何使用它
安排代码:
#include<iostream>
#include<string>
#include "glog/logging.h"
using namespace std;
#ifdef _DEBUG
#pragma comment(lib,"glogd.lib")
#else
#pragma comment(lib,"glog.lib")
#endif
void main()
{
//1初始化--》记得释放
google::InitGoogleLogging("Project27");//括号内是程序名
string home = "./Tylog/"; //要先创建此目录,否则运行报错.
string info_log = home + "master_info_";
google::SetLogDestination(0, info_log.c_str());
/*string warning_log = home + "master_warning_";
google::SetLogDestination(1, warning_log.c_str());
string error_log = home + "master_error_";
google::SetLogDestination(2, error_log.c_str());
string fatal_log = home + "master_fatal_";
google::SetLogDestination(3, fatal_log.c_str());*/
// You can specify one of the following severity levels (in increasing order of severity)
LOG(INFO) << "info1";
LOG(WARNING) << "warning1";
LOG(WARNING) << "warning2";
LOG(WARNING) << "warning3";
LOG(ERROR) << "error1";
LOG(INFO) << "info2";
LOG(INFO) << "info3";
LOG(ERROR) << "error2";
//注意: Logging a FATAL message terminates the program (after the message is logged)!
//LOG(FATAL) << "fatal";
google::ShutdownGoogleLogging();
system("pause");
}
结果:
打开、关闭注意:
使用glog之前必须先初始化库,要生成日志文件只需在开始log之前调用一次:
google::InitGoogleLogging(“程序名”); //括号内是程序名
当要结束glog时必须关闭库,否则会内存溢出:
google::ShutdownGoogleLogging();
严重性等级
你可以指定以下严重性等级中的一个(严重性从低到高):
INFO,WARNING,ERROR,FATAL.分别对应0,1,2,3;
输出一个FATAL信息会中止程序(在这条信息输出之后中止).注意:一个特定严重等级的日志信息不仅仅输出到该严重等级的日志文件中,它还会被记录到比它严重等级更低的文件中.例如,一个严重等级为FATAL的日志信息将会被记录到严重等级为FATAL,ERROR,WARNING,INFO的所有文件中.
再看另外一个例子:
void main()
{
google::InitGoogleLogging("Project27");
google::SetLogDestination(google::GLOG_INFO, "./Log/INFO_");
google::SetLogDestination(google::GLOG_WARNING, "./Log/WARNING_");
google::SetLogDestination(google::GLOG_ERROR, "./Log/ERROR_");
google::SetLogDestination(google::GLOG_FATAL, "./Log/FATAL_");
google::SetStderrLogging(google::GLOG_ERROR);
FLAGS_logtostderr = false;
FLAGS_max_log_size = 10;
FLAGS_log_prefix = true;
LOG(INFO) << "test log info";
LOG(WARNING) << "test log warning";
LOG(ERROR) << "test log error";
LOG(FATAL) << "test log fatal";
google::ShutdownGoogleLogging();
system("pause");
}
然后看看文件:
而且我发现了一个规律,就是文件类型分类,等级高的都会在等级低的里面出现,如下:
info文件里包含所有的日志:
waring文件就不含info文件:
而fatal文件,更是没有info,warning,error文件中的内容
条件输出:
//当条件满足时输出日志
LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
//google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息
LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
//上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;
//而不是当满足某条件的情况下,每隔 10 次输出一次日志信息
LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER << "th big cookie";
//当此语句执行的前 20 次都输出日志,然后不再输出
LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";
参数配置
FLAGS_logtostderr = true;
//设置日志消息是否转到标准输出而不是日志文件
FLAGS_alsologtostderr = true;
//设置日志消息除了日志文件之外是否去标准输出
FLAGS_colorlogtostderr = true;
//设置记录到标准输出的颜色消息(如果终端支持)
FLAGS_log_prefix = true;
//设置日志前缀是否应该添加到每行输出
FLAGS_logbufsecs = 0;
//设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size = 10;
//设置最大日志文件大小(以MB为单位)
FLAGS_stop_logging_if_full_disk = true;
//设置是否在磁盘已满时避免日志记录到磁盘
看看几个函数:
google::SetLogDestination(google::GLOG_INFO, "log/prefix_");
//设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀
google::SetLogFilenameExtension("logExtension");
//在日志文件名中级别后添加一个扩展名。适用于所有严重级别
google::SetStderrLogging(google::GLOG_INFO);
//大于指定级别的日志都输出到标准输出
这个要解释一下
比如:
google::SetStderrLogging(google::GLOG_INFO);
就会将大于GLOG_INFO的都输出到控制台
接着如果设置为:
google::SetStderrLogging(google::GLOG_ERROR);
就只有error:
如果:
google::SetStderrLogging(google::GLOG_FATAL);