glog的安装和使用

安装

git clone https://github.com/google/glog.git
cd /glog
cmake -gui:设置glog路径和输出路径,configure,然后generate.
打开VS,打开glog.sln,选择debug或者release输出

使用

项目test.sln.

  • 将glog.sln项目中的logging.h拷贝到test.sln目录,将最初的glog文件夹下的src\windows\glog拷贝到test.sln工程目录,工程中添加.拷贝glog.sln项目下的glog.lib和glogd.lib.(这里使用静态库,如果要使用动态库可以configure CMake中选择动态库进行编译)
  • 添加宏定义:_WINDOWS;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=;
  • 示例:
#include "logging.h"
using namespace google;

#ifdef _DEBUG
#pragma comment(lib, "glogd.lib")
#else
#pragma comment(lib, "glog.lib")
#endif

int main(int argc, char* argv[])
{
    // Start google log system:
    FLAGS_log_dir = "d:\\Logs";
    google::InitGoogleLogging(argv[0]);	//argv[0] 程序名(用过gcc的应该都知道)
    google::SetLogDestination(google::GLOG_INFO, "d:\\Logs\\INFO_");
    google::SetStderrLogging(google::GLOG_INFO);
    google::SetLogFilenameExtension("log_");
    //google::SetLogDestination(google::GLOG_INFO, "log/prefix_");  //设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀
    FLAGS_colorlogtostderr = true;  // Set log color
    FLAGS_logbufsecs = 0;  // Set log output speed(s)
    FLAGS_max_log_size = 1024;  // Set max log file size
    FLAGS_stop_logging_if_full_disk = true;  // If disk is full
    char str[20] = "hello log!";
    LOG(INFO) << str;
    LOG(INFO) << "info test" << "hello log!";  //输出一个Info日志
    LOG(WARNING) << "warning test";  //输出一个Warning日志
    LOG(ERROR) << "error test";  //输出一个Error日志
    google::ShutdownGoogleLogging();
    return 0;
}

输出

以上示例得到3个文件,对应三种日志级别的日志.

tips

  • 条件输出:
LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";  //当条件满足时输出日志
LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";  //google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息
LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER << "th big cookie";  //上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息
LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";  //当此语句执行的前 20 次都输出日志,然后不再输出
  • 只在调试模式打日志:DLOG(INFO) << "Found cookies";
  • CHECK宏
    CHECK 宏和标准库中的 assert 宏类似,可以在给定的条件不满足时终止程序;
    有各种用于相等/不等检查的宏: CHECK_EQ, CHECK_NE, CHECK_LE, CHECK_LT, CHECK_GE, CHECK_GT 。它们比较两个值,在不满足期望时打印包括这两个值的 FATAL 日志。注意这里的值需要定义了 operator<<(ostream, …)
    判断指针为空的宏:CHECK_NOTNULL(some_ptr);some_ptr->DoSomething();该宏会返回传入的指针,因此在构造函数的初始化列表中非常有用;
struct S {
  S(Something* ptr) : ptr_(CHECK_NOTNULL(ptr)) {}
  Something* ptr_;
};
  • 通过修改logging.cc中的LogFileObject::CreateLogfile,LogFileObject::Write更改输出log文件的格式和命名
    参考Glog使用文档

你可能感兴趣的:(C/C++,日志)