1、 概要
軟體一般都有維護自己的日志,日志有一下幾個作用:
Ø 通過檢視日志,了解軟體正在執行的操作,這一功能可以用于調試;
Ø 當軟體發生錯誤時,可以從日志中找出錯誤原因。
軟體完善日志功能和日志庫工具是兩個不同的概念,前者需要程式員考慮所有可能的異常情況,并将其捕獲然後寫進日志,而後者是這一過程中的工具。
本文将要介紹的是一款linux下用于C++的日志庫:log4cplus。
2、 安裝與配置
安裝
#tar –jxvf log4cplus-1.0.4-rc4.tar.bz2*.tar.bz2
#cd log4cplus-1.0.4-rc4
#configure --prefix=/usr/local/
#make
#make install
配置
#export LD_LIBRARY_PATH=/usr/local/log4cplus/lib/
3、 使用執行個體
log4cplus庫實作了5個等級的資訊:DEBUG、INFO、WARNING、ERROR和FATAL。
Ø 日志内容形式為:DEBUG Enter the main function
Ø 并且對日志檔案名沒有進行規定。
本文的執行個體對log4提供的日志函數進行了封裝,最終增加的功能如下:
Ø 日志檔案名形式:2009-10-10.txt
Ø 日志内容形式:DEBUG [2009-10-10 10:12:34] Enter the main function
Ø 自定義寫日志接口函數形式:writelog("TRACE",” Enter the main function”);
#include <log4cplus/logger.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> using namespace std; using namespace log4cplus; Logger pTestLogger; void writelog(char* leval,char* info) { struct tm *p; time_t lt=time(NULL); p=localtime(<); char* timetemp=ctime(<); *(timetemp+strlen(timetemp)-1)='/0'; char temp[10000]; sprintf(temp,"[%s] %s",timetemp,info); printf("temp==%s",temp); printf("leval====%s/n",leval); if(memcmp(leval,"TRACE",5)==0) printf("%d===%d",memcmp("TRACE","TRAC1E",5),memcmp(leval,"TRACE",5)); LOG4CPLUS_TRACE(pTestLogger,temp); if(memcmp(leval,"DEBUG",5)==0) LOG4CPLUS_DEBUG(pTestLogger,temp); if(memcmp(leval,"INFO",4)==0) LOG4CPLUS_INFO(pTestLogger,temp); if(memcmp(leval,"WARN",4)==0) LOG4CPLUS_WARN(pTestLogger,temp); if(memcmp(leval,"ERROR",5)==0) LOG4CPLUS_ERROR(pTestLogger,temp); if(memcmp(leval,"FATAL",5)==0) LOG4CPLUS_FATAL(pTestLogger,temp); } int main() { char* info="you have a iuns"; char filename[50]; struct tm *p; time_t lt=time(NULL); p=localtime(<); sprintf(filename,"%d-%d-%d.txt",(1900+p->tm_year), (1+p->tm_mon),p->tm_mday); FILE* stream=fopen(filename,"wb"); SharedAppenderPtr pFileAppender(new FileAppender((filename))); pTestLogger = Logger::getInstance(("LoggerName")); pTestLogger.addAppender(pFileAppender); writelog("TRACE",info); writelog("DEBUG",info); writelog("ERROR",info); return 0; } |
編譯指令:
#g++ filetime.cpp -I /usr/local/log4cplus/include/ -L /usr/local/log4cplus/lib -llog4cplus -o filetime