在做伺服器程式的過程中我想最有用的調試手段應該是日誌系統了,好的日誌能夠直觀快速的定位程式的問題,如系統崩潰,死結,錯誤的異常拋出等。如何選擇一個好的日誌庫對程式員來說至關重要。設計簡陋粗糙的日誌系統,可能會到導致系統的效能隨著日誌的增加而線性降低,還可能導致安全執行緒型等問題,我在項目中用到了log4cplus這個日誌庫,log4cplus是C++編寫的開源的日誌系統,功能非常全面,用到自己開發的工程中會比較專業的。log4cplus是C++編寫的開源的日誌系統,前身是java編寫的log4j系統.受Apache Software License保護。作者是Tad E. Smith。log4cplus具有安全執行緒、靈活、以及多粒度控制的特點,通過將資訊劃分優先順序使其可以面向程式調試、運行、測試、和維護等全生命週期; 你可以選擇將資訊輸出到螢幕、檔案、NT event log、甚至是遠程伺服器;通過指定策略對日誌進行定期備份等等。
Log4cplus在Linux下的安裝:
1. 配置 ./ configure--prefix=/usr
2. 編譯 make
3. 安裝 make intsall
--prefix 是指定安裝目錄,Linux預設會從/usr/include下尋找標頭檔,在/usr/lib目錄尋找庫檔案。
Log4cplus移植到ARM:
首先你需要安裝並匯出一個交叉編譯環境,然後查看你的交叉編譯環境預設的庫的安裝目錄,在終端輸入命令:echo 'main(){}'|arm-none-linux-gnueabi-gcc -E -v –
查看預設的安裝目錄。
1. 配置sudo ./configure --prefix=yourinstall path --host=arm-linux
2. 修改Makefile將Makefile中的所有的與編譯相關的編譯鏈工具都改成交叉編譯工具,這其中包括:ar ,as ,ld ,gcc ,g++,rannlib
3. 編譯 make
4. 安裝 make install
Log4Cplus的使用基本步驟:
1. 實現了一個封裝了輸出介質的appender對象
2. 執行個體化一個封裝了輸出格式的Layout對象
3. 將Layout對象綁定(attach)到appender
4. 獲得Logger對象
5. 將append綁定到Logger
6. 設定Logger的日誌等級
7. 列印日誌
例子程式:
#include <iostream>#include <log4cplus/logger.h>#include <log4cplus/loggingmacros.h>#include <log4cplus/configurator.h>#include <iomanip>#include <log4cplus/logger.h>#include <log4cplus/fileappender.h>#include <log4cplus/consoleappender.h>#include <log4cplus/layout.h>#include <time.h>#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;using namespace log4cplus;using namespace std;int main(){ SharedAppenderPtr appendPtr(new RollingFileAppender("log_text.txt",1*1024*1024,1,true)); Logger logger = Logger::getInstance("test"); std::string pattern = "%p-%d{%y/%m/%d %H:%M:%S-%Q}{ThreadID:%t} ->%m\r\n"; std::auto_ptr<Layout> layout_(new PatternLayout(pattern)); appendPtr->setLayout(layout_); logger.addAppender(appendPtr); logger.setLogLevel(ALL_LOG_LEVEL); LOG4CPLUS_INFO(logger,"Info message"); LOG4CPLUS_DEBUG(logger,"Debug message"); LOG4CPLUS_TRACE(logger,"Trace message"); LOG4CPLUS_ERROR(logger,"Error message"); LOG4CPLUS_WARN(logger,"Warning message"); LOG4CPLUS_FATAL(logger,"fatal message"); return 0;}
這是一個簡單的例子,更為具體的使用方式可以去查閱更詳細的資料:如:http://wenku.baidu.com/view/51d96c1d964bcf84b9d57b9c.html Log4cplus日誌庫的有點很明顯,不會隨著日誌數量的增加而增加系統的負擔,而且不用擔心安全執行緒等其他的問題