生活随笔
收集整理的這篇文章主要介紹了
日志库EasyLogging++学习系列(1)—— 简要介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于有開發經驗的程序員來說,記錄程序執行日志是一件必不可少的事情。通過查看和分析日志信息,不僅可以有效地幫助我們調試程序,而且當程序正式發布運行之后,更是可以幫助我們快速、準確地定位問題。在現在這個開源的年代,并不需要我們自己去寫一套日志庫,開源的版本已經有很多了。然而遺憾的是,在目前 開源的C++日志庫中,并沒有一個在使用份額上占絕對優勢的,我自己之前用過 log4cplus和glog,這兩個庫都比較成熟了,而且網上教程也很多,所以一直都很喜歡使用這兩個日志庫。
前段時間,在GitHub上我偶然看到了另外一個開源的C++日志庫,當時還只是粗略地研究了一下,結果竟然讓我愛不釋手,它就是Easylogging++。 和log4cplus和glog相比, Easylogging++最大的特點就是它只有一個頭文件 , 并且無需任何外部依賴, 我從來沒有見過哪一個日志庫可以做到如此輕量而且還能兼顧性能的。除此之外, Easylogging++使用起來非常簡單,同時還支持文件配置, 提供了強大的自定義日志格式的能力,還提供對第三方庫,STL容器的支持。面對如此炫酷的開源日志,怎么能不去學習學習!!!
Easylogging++項目在GitHub 的開源地址:https://github.com/easylogging/easyloggingpp
功能特征
高度可配置 速度非常快 線程和類型安全 跨平臺 自定義日志模式 條件日志和偶然日志 性能跟蹤 詳細記錄日志 中斷處理 輔助CHECK宏 STL 日志 第三方庫日志(比如Qt, boost, wxWidgets ) 可擴展性 支持Debug功能 系統日志記錄 perror風格日志 C++流操作符風格日志 C 語言printf風格日志 ?……
版本說明
寫這篇文章時,最新的? Easylogging++ 版本是 V9.80 ,如果編譯器不支持C++11的話,是無法編譯的。對于Visual Studio系列來說,必須是VS2012或以上版本才行。如果還停留在VS2010、VS2008,VS2005的小伙伴,可以考慮使用 EasyLogging++ V8.91 版本。需要注意的是,不同的版本在使用方法和功能支持上都會有所差異。特別指出,本系列中所有的學習記錄,只適用于? Easylogging++? 版本 V9.80 。另外,在本系列文章中出現的所有演示代碼都是在 64Bit Windows 7 系統下使用 Visual Studio 2013 編譯測試的。
快速使用
正如前面所說,Easylogging++使用起來非常簡單,簡單到什么地步呢?下面是GitHub上給出一個示例代碼:
[cpp] view plaincopy print?
#include?"easylogging++.h" ???? INITIALIZE_EASYLOGGINGPP?? ?? int ?main(int ?argv,?char *?argc[])?{?????LOG(INFO)?<<?"My?first?info?log?using?default?logger" ;?? ???return ?0;?? }??
#include "easylogging++.h"INITIALIZE_EASYLOGGINGPPint main(int argv, char* argc[]) {LOG(INFO) << "My first info log using default logger";return 0;
}
示例代碼只有短短幾行,每行代碼的作用也一目了然:
包含easylogging++.h 頭文件 使用宏 INITIALIZE_EASYLOGGINGPP?初始化 使用宏 LOG(INFO) 開始日志記錄
就是這么簡單,只需三步,即可完成你的日志記錄。這里需要特別說明的是,初始化宏? INITIALIZE_EASYLOGGINGPP 必須使用而且只能使用一次,否則將會產生編譯錯誤。最好的放置這個初始化宏的地方是位于程序入口函數所在文件的頂部,緊跟在包含頭文件的代碼后面。
自定義日志
Easylogging++強大的自定義日志格式的能力是毋容置疑的,我們可以通過配置文件、配置參數、配置宏定義等方式來定義自己想要的日志格式。下面是一個利用配置文件來自定義日志的一個例子:
[cpp] view plaincopy print?
#include?"easylogging++.h" ???? INITIALIZE_EASYLOGGINGPP?? ?? int ?main(int ?argc,?char **?argv)??{?? ????el::Configurations?conf("my_log.conf" );?? ????el::Loggers::reconfigureAllLoggers(conf);?? ?? ????LOG(TRACE)???<<?"*****?trace?log??*****" ;?? ????LOG(DEBUG)???<<?"*****?debug?log??*****" ;?? ????LOG(ERROR)???<<?"*****?error?log??*****" ;?? ????LOG(WARNING)?<<?"*****?warning?log??*****" ;?? ????LOG(INFO)????<<?"*****?info?log??*****" ;?? ?? ????system("pause" );?? ????return ?0;?? }?? #include "easylogging++.h"INITIALIZE_EASYLOGGINGPPint main(int argc, char** argv)
{el::Configurations conf("my_log.conf");el::Loggers::reconfigureAllLoggers(conf);LOG(TRACE) << "***** trace log *****";LOG(DEBUG) << "***** debug log *****";LOG(ERROR) << "***** error log *****";LOG(WARNING) << "***** warning log *****";LOG(INFO) << "***** info log *****";system("pause");return 0;
}
其中配置文件 my_log.conf 的內容如下:
[plain] view plaincopy print?
*?GLOBAL:?? ????ENABLED?????????????????=???true?? ????TO_FILE?????????????????=???true?? ????TO_STANDARD_OUTPUT??????=???true?? ????FORMAT??????????????????=???"[%level?|?%datetime]?|?%msg"?? ????FILENAME????????????????=???"log\\log_%datetime{%Y%M%d}.log"?? ????MILLISECONDS_WIDTH??????=???3?? ????PERFORMANCE_TRACKING????=???false?? ????MAX_LOG_FILE_SIZE???????=???1048576?? ????LOG_FLUSH_THRESHOLD?????=???0?? ?????? *?TRACE:?? ????FILENAME????????????????=???"log\\trace_log_%datetime{%Y%M%d}.log"?? ?????? *?DEBUG:?? ????FILENAME????????????????=???"log\\debug_log_%datetime{%Y%M%d}.log"?? ?????? *?FATAL:?? ????ENABLED?????????????????=???false?? ?????? *?ERROR:?? ????FILENAME????????????????=???"log\\error_log_%datetime{%Y%M%d}.log"?? ?????? *?WARNING:?? ????FILENAME????????????????=???"log\\warning_log_%datetime{%Y%M%d}.log"?? ?????? *?INFO:?? ????FILENAME????????????????=???"log\\info_log_%datetime{%Y%M%d}.log"?? ?????? *?VERBOSE:?? ????ENABLED?????????????????=???false?? * GLOBAL:ENABLED = trueTO_FILE = trueTO_STANDARD_OUTPUT = trueFORMAT = "[%level | %datetime] | %msg"FILENAME = "log\\log_%datetime{%Y%M%d}.log"MILLISECONDS_WIDTH = 3PERFORMANCE_TRACKING = falseMAX_LOG_FILE_SIZE = 1048576LOG_FLUSH_THRESHOLD = 0* TRACE:FILENAME = "log\\trace_log_%datetime{%Y%M%d}.log"* DEBUG:FILENAME = "log\\debug_log_%datetime{%Y%M%d}.log"* FATAL:ENABLED = false* ERROR:FILENAME = "log\\error_log_%datetime{%Y%M%d}.log"* WARNING:FILENAME = "log\\warning_log_%datetime{%Y%M%d}.log"* INFO:FILENAME = "log\\info_log_%datetime{%Y%M%d}.log"* VERBOSE:ENABLED = false
通過這樣的一個配置文件生成出來的日志會非常整齊,同時日志信息會保存到不同的文件中,而且還會輸出到標準輸出窗口。如下:
看到這里,相信對于那些以前用過類似log4cplus或者glog等日志庫的小伙伴來說,其實已經完全可以上手使用Easylogging++了,剩下的部分都是一些細節或者是Easylogging++擴展性的功能介紹,這些會在后面的學習中逐漸加以記錄。如果有和我一樣看到并且就喜歡上Easylogging++的朋友,就讓我們一起來深入了解Easylogging++并把它應用到實際的開發之中吧。
總結
以上是生活随笔 為你收集整理的日志库EasyLogging++学习系列(1)—— 简要介绍 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。