C++開源日誌庫選擇
每個系統都需要日誌記錄,通過日誌方便排錯除錯,管理執行時的異常。
而C++開源的日誌庫,待選的有 glog、log4cplus、log4cpp、log4cxx
目前準備使用glog,使用方便,效能也不錯,待進一步試驗,如果有不能滿足的功能就轉用 log4cplus,功能很全面,不過稍複雜些。
其它兩個都是三年前就沒更新,沒好感,暫不準備使用。
1.log4cplus
最新版本:1.1.0 2012-03-11
功能全面,使用稍複雜。
程式碼示例:
01.#include <log4cplus/layout.h> 02. 03.#include <log4cplus/configurator.h> 04. 05.#include <iomanip> 06. 07.SharedAppenderPtr pFileAppender(new FileAppender("testlog.log")); 08. 09.Logger pTestLogger = Logger::getInstance("LoggerName"); 10. 11.pTestLogger.addAppender(pFileAppender); 12. 13.sprintf(a,"%d",i); 14. 15.LOG4CPLUS_WARN(pTestLogger, "This is a <Warn> log message..." << a );
2.log4cxx
最新版本: 0.10.0 2008-04-03
(log4cxx 是由JAVA實現的 log4j 開源的,用C++實現的一個開源庫)
到官網下載了原始碼,需要開啟工程自己編譯成 dll檔案,最主要的需要配置一下,可以寫入一個.conf 文件。
然後在程式中載入下該.conf 配置檔,就可以方便使用了,很便利。
.conf配置檔
# 設定root logger為DEBUG級別,使用了ca和fa兩個Appender # ERROR、WARN、INFO、DEBUG log4j.rootLogger=DEBUG, fa, ca #對Appender fa進行設定: # 這是一個檔案型別的Appender, # 其輸出檔案(File)為./output.log, # 輸出方式(Append)為覆蓋方式, # 輸出格式(layout)為PatternLayout log4j.appender.fa=org.apache.log4j.RollingFileAppender log4j.appender.fa.File=/Log/DeviceGateway.log log4j.appender.fa.MaxFileSize=1MB log4j.appender.fa.MaxBackupIndex=10 log4j.appender.fa.Threshold=INFO log4j.appender.fa.ImmediateFlush=true log4j.appender.fa.Append=true log4j.appender.fa.layout=org.apache.log4j.PatternLayout log4j.appender.fa.layout.ConversionPattern==%d %-5p %.16c - %m%n #對Appender ca進行設定: # 這是一個控制檯型別的Appender # 輸出格式(layout)為PatternLayout log4j.appender.ca=org.apache.log4j.ConsoleAppender log4j.appender.ca.Threshold=DEBUG log4j.appender.ca.layout=org.apache.log4j.PatternLayout log4j.appender.ca.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %r %x %.16c - %m%n
3. glog
最新版本: 0.3.2 2012-1-12
使用方便,效能也不錯。
Google Glog 是一個C++語言的應用級日誌記錄框架,提供了 C++ 風格的流操作和各種助手巨集。
Google glog是一個基於程式級記錄日誌資訊的c++庫,程式設計使用方式與c++的stream操作類似
程式碼示例:
01.#include <glog/logging.h> 02. 03.google::InitGoogleLogging(argv[0]); 04. 05.google::SetLogDestination(google::INFO,"./myInfo_"); 06. 07.LOG(INFO) << "This is a <Warn> log message..." << i;
4. Log4cpp
最新版1.0.x 2007-09-03
感覺 跟 log4cplus類似,結構稍簡單些,不過程式碼也不少寫。
01.#include <log4cpp/Category.hh>
02.#include <log4cpp/PropertyConfigurator.hh>
03.#include <log4cpp/NDC.hh>
04.#include <log4cpp/FileAppender.hh>
05.#include <log4cpp/BasicLayout.hh>
06.log4cpp::Layout* layout = new log4cpp::BasicLayout();
07.log4cpp::Appender* appender = new log4cpp::FileAppender("FileAppender", "./test_log4cpp1.log");
08.appender->setLayout(layout);
09.log4cpp::Category& warn_log = log4cpp::Category::getInstance("mywarn");
10.warn_log.setAdditivity(false);
11.warn_log.setAppender(appender);
12.warn_log.setPriority(log4cpp::Priority::WARN);
13.warn_log.critStream() << "This is a <Warn> log message..." << i;
再推薦個Github上的一個日誌庫,即c-log庫,挺好用的,最開始是一個朋友介紹的,專案地址是https://github.com/0xmalloc/c-log,最主要的特點是簡單,快速、穩定和執行緒安全自由支援C\C++,想改什麼改什麼,而且對任何型別的mv或者rename切分支援都非常好。但它僅僅只支援日誌級別的控制和簡單的日誌寫入,並沒有提供對於日誌檔案大小控制自動建立檔案,若沒有這方面的需求,該庫還是值得考慮的。
僅僅只有log.c,log.h,macro_define.h檔案。