天天看點

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++ --> 語音 --> 符合模式 修改成否。