目录

1、编译安装

2、Qt下工程示例

3、几个常用参数

4、重定位日志信息到特定文件

5、条件输出

6、其它函数


 日志级别:

        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();
}
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐