linux glog使用
官方地址:https://github.com/google/glog,推荐使用0.3.5版本,避坑。日志级别:0 - debug1 - info (still a LOT of outputs)2 - warnings3 - errors对应级别的日志打印在对应级别的日志文件中,并且高级别的日志同时打印在本级别和低级别中。例如 INFO中会有WARNING级别的输出。LOG(INFO) <
目录
日志级别:
0 - debug
1 - info (still a LOT of outputs)
2 - warnings
3 - errors
对应级别的日志打印在对应级别的日志文件中,并且高级别的日志同时打印在本级别和低级别中。例如 INFO中会有WARNING级别的输出。
LOG(INFO) << "info test"; //输出一个Info日志
LOG(WARNING) << "warning test"; //输出一个Warning日志
LOG(ERROR) << "error test"; //输出一个Error日志
LOG(FATAL) << "fatal test"; //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序
1、编译安装
wget https://codeload.github.com/google/glog/zip/refs/tags/v0.3.5
cd glog-0.3.5
# ./autogen.sh
./configure --prefix=path(install) # 可忽略,使用默认安装路径
make
sudo make install
注意:arm平台编译,./configure增加编译选项: --build=arm-linux
默认安装路径为:
/usr/local/include
/usr/local/lib
libglog.pc '/usr/local/lib/pkgconfig'
2、Qt下工程示例
.pro配置:
CONFIG += c++11 console
SOURCES += main.cpp
LIBS += -L/usr/local/lib -lglog -lpthread
示例代码:
#include <string>
#include <iostream>
#include glog/logging.h // glog 头文件
#include glog/raw_logging.h
int main(int argc, char** argv)
{
google::InitGoogleLogging(argv[0]); // 初始化log当前目录
FLAGS_log_dir = "./log" ; // 日志文件目录路径:argv[0] + FLAGS_log_dir
FLAGS_stderrthreshold = google::INFO; //log等级为INFO级别
LOG(INFO) << "logging info" ;
LOG(WARNING) << "logging warning" ;
LOG(ERROR) << "logging error" ;
google::ShutdownGoogleLogging(); // 程序结束前关闭日志,避免内存溢出
return 0;
}
结果:
log目录下会生成三个文件:xxx.ERROR、xxx.INFO、xxx.WARNING,记录打印信息。如:xxx.WARNING信息如下:
Log file created at: 2021/09/27 14:37:17
Running on machine: ubuntu-pc
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
W0927 14:37:17.748003 11497 main.cpp:14] logging warning
E0927 14:37:17.748054 11497 main.cpp:15] logging error
3、几个常用参数
默认控制台与日志文件均显示,通过下面俩参数设置只显示在其中一个。
FLAGS_logtostderr = true; // 设置日志消息只显示在控制台。
FLAGS_alsologtostderr = true; // 设置日志消息只显示在日志文件,不显示在控制台。
FLAGS_colorlogtostderr = true; // 设置记录到标准输出的颜色消息(如果终端支持)
FLAGS_log_prefix = true; // 设置日志前缀是否应该添加到每行输出
FLAGS_logbufsecs = ; // 设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size = 10; // 设置最大日志文件大小(以MB为单位)
FLAGS_stop_logging_if_full_disk = true; // 设置是否在磁盘已满时避免日志记录到磁盘
补充:
FLAGS_log_dir 日志输出目录
FLAGS_v 自定义VLOG(m)时,m值小于此处设置值的语句才有输出
FLAGS_max_log_size 每个日志文件最大大小(MB级别)
FLAGS_minloglevel 输出日志的最小级别,即高于等于该级别的日志都将输出。
4、重定位日志信息到特定文件
google::SetLogDestination(google::GLOG_FATAL, "log_caffe_err.log");
google::SetLogDestination(google::GLOG_ERROR, "log_caffe_err.log");
google::SetLogDestination(google::GLOG_WARNING, "log_caffe_err.log");
google::SetLogDestination(google::GLOG_INFO, "log_caffe_info.log");
5、条件输出
1)当条件满足时输出日志
//当 num_cookies > 10 时输出日志
LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
2) 第一次打印开始,每隔N次打印一次
//google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息
LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
3)每隔N次判断条件是否满足,满足则打印。
//上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息
LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER << "th big cookie";
4)前N次打印,之后不打印
//当此语句执行的前 20 次都输出日志,然后不再输出
LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";
注意:各个语句使用时自己的 google::COUNTER计数器是互相独立的。
6、其它函数
google::SetLogDestination(google::INFO, "log/INFO_"); // 设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀
google::SetLogFilenameExtension("logExtension"); // 在日志文件名中级别后添加一个扩展名。适用于所有严重级
google::SetStderrLogging(google::INFO); // 大于指定级别的日志都输出到标准输出
google::InstallFailureSignalHandler(); // 将 coredumped 信息输出到 stderr
扩展阅读:
1、Google glog使用说明
Google glog使用说明 - LyndonYoung - 博客园
代码示例:
#include <iostream>
#include <glog/logging.h>
#include <cstdlib>
int main(int argc, char** argv)
{
google::InitGoogleLogging(argv[0]);
// create logpath
std::string str_des;
str_des.append("mkdir -p ");
str_des.append("log");
system(str_des.c_str());
// INFO
std::string str_info;
str_info.append("./log");
str_info.append("/INFO_");
google::SetLogDestination(google::INFO, str_info.c_str());
// WARNING
std::string str_warn;
str_warn.append("./log");
str_warn.append("/WARNING_");
google::SetLogDestination(google::WARNING, str_warn.c_str());
LOG(WARNING) << "The is a warning!";
// my own type
std::string str_pro;
str_pro.append("./log");
str_pro.append("/PROFILE_");
google::SetLogDestination(google::WARNING, str_pro.c_str());
LOG(WARNING) << "The is my own type!";
// stop glog
google::ShutdownGoogleLogging();
}
更多推荐
所有评论(0)