glog repo: https://github.com/google/glog
clone代码之后,可以使用CMake进行编译,
使用vs2019编译后,会产生include lib dll, 在项目中包含之后就可以使用了。
也可以直接使用vcpkg进行安装
glog的日志级别
glog 支持四种日志级别,INFO、WARNING、ERROR和FATAL。不同级别的日志信息会输出到不同文件,同时高级别的日志也会写入到低级别中。默认情况下,在打印完FATAL日志之后,程序将会终止。ERROR和FATAL的日志除了会写到日志中,还会输出到 stderr。
enum SeverityLevel
{
google::INFO = 0,
google::WARNING = 1,
google::ERROR = 2,
google::FATAL = 3,
};
日志格式
日志格式:I+日期 时:分:秒.微秒 线程号 源文件名:行数] 信息
设置输出到指定目录
// 设置特定严重级别的日志的输出目录和前缀
// 第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀
google::SetLogDestination(google::GLOG_INFO, "D:/glog_path/INFO_");
google::SetLogDestination(google::GLOG_WARNING, "D:/glog_path/WARNING_");
google::SetLogDestination(google::GLOG_ERROR, "D:/glog_path/ERROR_");
google::SetLogDestination(google::GLOG_FATAL, "D:/glog_path/FATAL_");
//在日志文件名中级别后添加一个扩展名
google::SetLogFilenameExtension(".log");
示例代码
// glog_test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include <iostream>
#include <glog/logging.h>
int main()
{
google::InitGoogleLogging("");
// 设置特定严重级别的日志的输出目录和前缀
// 第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀
google::SetLogDestination(google::GLOG_INFO, "D:/glog_path/INFO_");
google::SetLogDestination(google::GLOG_WARNING, "D:/glog_path/WARNING_");
google::SetLogDestination(google::GLOG_ERROR, "D:/glog_path/ERROR_");
google::SetLogDestination(google::GLOG_FATAL, "D:/glog_path/FATAL_");
//在日志文件名中级别后添加一个扩展名。适用于所有严重级别
google::SetLogFilenameExtension(".log");
//大于指定级别的日志都输出到标准输出
google::SetStderrLogging(google::GLOG_INFO);
//实时输出日志
FLAGS_logbufsecs = 0;
//最大日志大小(MB)
FLAGS_max_log_size = 100;
FLAGS_colorlogtostderr = true; //设置输出到屏幕的日志显示相应颜色
int num_cookies = 11;
int size = 123;
//当条件满足时输出日志
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";
LOG(WARNING) << "WARNING 01";
LOG(ERROR) << "err 02";
LOG(ERROR) << "err 03";
return 0;
}
相比log4cplus, glog目测更好。在项目中应用时,需要自己封装类进行使用。