日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

glog日志库使用笔记

發布時間:2023/12/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 glog日志库使用笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  日志能方便地診斷程序原因、統計程序運行數據,是大型軟件系統必不可少的組件之一。glog?是google的開源日志系統,相比較log4系列的日志系統,它更加輕巧靈活。

  在Github上下載glog,解壓后用CMake生成VS2017工程(默認生成的是靜態鏈接庫glogd.lib):

  在64位的windows系統中,一個64位進程不能加載一個32位dll,同理一個32位進程也不能加載一個64位dll,因此要注意應用程序和glog庫版本的統一。編譯成功后,在build\Debug文件夾下會生成glogd.lib庫文件。? ?src\windows路徑下的glog文件夾包含Windows平臺所需的頭文件:

?  使用glog時可以在項目“屬性→C/C++→常規→附加包含目錄”中設置glog頭文件路徑,也可以直接將windows/glog文件夾復制到VS2017的安裝路徑中:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include

?  新建一個簡單的x64的Debug工程進行測試,在“項目屬性→鏈接器→輸入→附加依賴項”中加入glogd.lib,并在“項目屬性→鏈接器→常規→附加庫目錄”中輸入glogd.lib的路徑。進行編譯:

#include <glog/logging.h>int main(int argc, char* argv[]) {// Initialize Google's logging library.google::InitGoogleLogging(argv[0]);// ...int num_cookies = 100;LOG(INFO) << "Found " << num_cookies << " cookies";return 0; }

  結果出現錯誤:

1>ConsoleApplication1.obj : error LNK2019: 無法解析的外部符號 "__declspec(dllimport) void __cdecl google::InitGoogleLogging(char const *)" (__imp_?InitGoogleLogging@google@@YAXPEBD@Z),該符號在函數 main 中被引用 1>ConsoleApplication1.obj : error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __cdecl google::LogMessage::LogMessage(char const *,int)" (__imp_??0LogMessage@google@@QEAA@PEBDH@Z),該符號在函數 main 中被引用 1>ConsoleApplication1.obj : error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __cdecl google::LogMessage::~LogMessage(void)" (__imp_??1LogMessage@google@@QEAA@XZ),該符號在函數 main 中被引用 1>ConsoleApplication1.obj : error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl google::LogMessage::stream(void)" (__imp_?stream@LogMessage@google@@QEAAAEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@XZ),該符號在函數 main 中被引用 1>C:\Users\Thinkpad\Desktop\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe : fatal error LNK1120: 4 個無法解析的外部命令

?  參考其他文檔,在預處理器定義中添加GOOGLE_GLOG_DLL_DECL=宏后解決:

  運行程序發現并沒有信息輸出到控制臺中,如果沒有設置日志存放的文件夾,它們會被存放到指定的路徑(windows平臺上會默認存放到$(LOCALAPPDATA)的Temp文件夾下。如C:\Users\Thinkpad\AppData\Local\Temp,路徑中的“Thinkpad”是計算機當前的用戶名),你可以找到以特定格式命名的文件,格式為:

/tmp/<program name>.<hostname>.<user name>.log.<severity level>.<date>.<time>.<pid>

  生成的log文件如下圖所示:

??

  打開文件可以看到如下信息:

Log file created at: 2018/07/14 16:37:30 Running on machine: ROBO Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg I0714 16:37:30.196939 15848 consoleapplication1.cpp:14] Found 100 cookies

  上面介紹了日志輸出的格式和我們輸出的日志信息。glog擁有的4個日志等級:INFO,WARNING,ERROR,FATAL分別對應0,1,2,3。數值越大嚴重性越高,嚴重性高的日志不但會保存到自己的日志文件中,還會同時保存到所有比它嚴重性更低的日志文件中。例如ERROR信息會被同時打印到INFO,WARNING,ERROR日志文件中。添加如下測試代碼:

  LOG(INFO) << "google log first info level message!";LOG(WARNING) << "google log first warning level message!";LOG(ERROR) << "google log first error level message!";

  運行程序生成了三種日志文件:

// INFO
Log file created at: 2018/07/14 16:46:28 Running on machine: ROBO Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg I0714 16:46:28.779220 9736 consoleapplication1.cpp:14] google log first info level message! W0714 16:46:28.780218 9736 consoleapplication1.cpp:15] google log first warning level message! E0714 16:46:28.780218 9736 consoleapplication1.cpp:16] google log first error level message!// WARNING Log file created at: 2018/07/14 16:46:28 Running on machine: ROBO Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg W0714 16:46:28.780218 9736 consoleapplication1.cpp:15] google log first warning level message! E0714 16:46:28.780218 9736 consoleapplication1.cpp:16] google log first error level message!// ERROR Log file created at: 2018/07/14 16:46:28 Running on machine: ROBO Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg E0714 16:46:28.780218 9736 consoleapplication1.cpp:16] google log first error level message!

  同時注意控制臺輸出了錯誤信息(默認情況下ERROR和FATAL等級的信息會同時被輸出到stderr上):

?

  不同于log4系列的日志系統通過配置文件的方式,glog采用命令的方式來來配置參數,還可以直接在程序中指定。比如下面程序指定了輸出log的文件夾:

int main(int argc, char* argv[]) {string home = "./log/"; //要先創建此目錄,否則運行報錯. google::InitGoogleLogging(argv[0]);string info_log = home + "master_info_";google::SetLogDestination(google::INFO, info_log.c_str());string warning_log = home + "master_warning_";google::SetLogDestination(google::WARNING, warning_log.c_str());string error_log = home + "master_error_";google::SetLogDestination(google::ERROR, error_log.c_str());string fatal_log = home + "master_fatal_";google::SetLogDestination(google::FATAL, fatal_log.c_str());// You can specify one of the following severity levels (in increasing order of severity)LOG(INFO) << "info";LOG(WARNING) << "warning";LOG(ERROR) << "error";LOG(FATAL) << "fatal"; // Logging a FATAL message terminates the program (after the message is logged)!return 0; }

  在Project目錄下(如果直接運行程序則在程序所在路徑下)創建log文件夾,運行程序生成的日志會輸出到該文件夾中:

  注意,打印FATAL消息會在打印完成后終止程序:

?

  glog提供了一些調試模式時輸出,release模式下不輸出的宏,如DLOG,DLOG_IF,DLOG_EVERY_N等。這些宏只有在debug模式下才會輸出日志,正常模式下不會輸出日志,也不會拖慢應用程序的速度。

  // 如果工程為Debug模式,下面信息會輸出,如果是release模式,下面信息不會輸出.DLOG(INFO) << "DLOG:Debug Mode Message!";

?  

  如果要自定義輸出log文件的格式,可修改源代碼logging.cc文件中相關的函數。

?

?

?

參考:

glog簡介

glog 入門教程

glog使用教程

Glog使用文檔

glog使用與功能修改

Google-glog 日志庫使用手記

在Windows上編譯、應用glog

Installing GLog on Windows

How To Use Google Logging Library (glog)

google/glog: C++ implementation of the Google logging module

轉載于:https://www.cnblogs.com/21207-iHome/p/9297329.html

總結

以上是生活随笔為你收集整理的glog日志库使用笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。