1. 程式人生 > >C++開源日誌庫選擇

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檔案。