天天看点

vs2017使用google开源日志库glog

吭呲了俩小时搞定,这效率真够可以的。扒一堆博客,个个写的都不爽利。

预备:vs2017、cmake、glog

cmake安装文件去官网找,个人下载的msi文件直接安装的,安装时默认是不添加到环境变量,修改为为所有用户添加到环境变量。本地安装完成后,cmd查看:cmake --version。

glog从github下载。

glog文件夹下打开cmd,依次命令:

cmake .
cmake --build .
           

编译成功后,会自动生成本机vs对应版本的lib库:glog\Debug\glogd.lib,默认生成win32的debug库。

将文件夹glog\src\windows\glog与上述lib文件拷贝到新建项目中,工程添加宏定义:

GLOG_NO_ABBREVIATED_SEVERITIES
GOOGLE_GLOG_DLL_DECL=
           

然后就可以正常使用了。

#include "pch.h"
#include <iostream>
#include "glog/logging.h"

int main(int argc, char* argv[])
{
    system("mkdir Log && cd Log && mkdir info warning error fatal");
    google::InitGoogleLogging("");
    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/");
    LOG(INFO) << "info 005";
    LOG(WARNING) << "warning 005";
    LOG(ERROR) << "error 005";
    //LOG(FATAL) << "fatal 005";

    google::ShutdownGoogleLogging();

    return 0;
}
           

如果想生成x64的debug或者release库,可以修改glog中cmake配置文件生成其它平台的lib库(我不会,第一次接触cmake,有点懵,这玩意跨平台能力这么强,相信以后肯定会普及起来的!),也可以使用cmake gui工具生成。

注:Optional toolset to use填入:host=x64(其它博客写了这一点,截图时忘了。不过我没写,也照样生成行x64位的了);点击Configure执行完毕后,再点击Gernerate,会生成sln解决方案,打开sln后编译一下工程,再拷贝生成的64位的 lib 和 lib/dll 使用。

vs2017使用google开源日志库glog

下图箭头所指地方,如果打勾,debug和release都会生成 lib+dll;如果不打勾,仅生成lib。

vs2017使用google开源日志库glog
vs2017使用google开源日志库glog

用的时候发现低级别日志会记录高级别日志,若要改动,参考一篇博客,然后重新cmake,生成新的lib库进行使用。

另外,glog个人没有找到格式化输出设置,可以参考另一篇博客,我直接将俩功能函数添加进使用工程的 logging.h 里了。

即在logging.h中添加以下代码:

template<typename T>
std::string pack_string(const T &value) {
    std::stringstream ss;
    ss << value;
    return ss.str();
}
template<typename T, typename... Args>
std::string pack_string(const T &value, Args... args) {
    std::stringstream ss;
    ss << value << pack_string(args...);
    return ss.str();
}
#define ADDTAG LOG(INFO) << pack_string("Enter ", __FUNCTION__);
#define ADDLEAVE LOG(INFO) << pack_string("Leave ", __FUNCTION__);
           

同时设置:项目工程----> 属性 ---> c/c++ --> 语音 --> 符合模式 修改成否。