linux下的log4cplus的安裝和使用


log4cplus是一款優秀的基於C/C++的開源日志庫。log4cplus具有線程安全,不用但心在多線程狀態下寫日志問題;使用靈活,可通過配置文件設置日志級別下輸出位置,還可以在程序運行時動態設置日志輸出級別,隨心所欲掌控日志的輸出;以及多粒度控制的特點。通過將信息划分優先級使其可以面向程序調試、運行、測試、和維護等全生命周期; 可以選擇將信息輸出到屏幕、文件、NT event log、甚至是遠程服務器;通過指定策略對日志進行定期備份。可以滿足大部分開發者對日志系統需求,功能全面。
下載地址:http://sourceforge.net/projects/log4cplus/files/log4cplus-stable/
tar -xjf log4cplus-1.0.4.tar.bz2(解壓縮),切換到解壓縮路徑下
安裝:./configure;make;make install
這里已經安裝成功,默認的路徑lib庫路徑是/usr/local/lib/,頭文件的位置:/usr/local/include/log4cplus
將/usr/local/lib下的和log4cplus相關的庫都拷貝到/usr/lib,將頭文件加到/etc/profile下的CPLUS_INCLUDE_PATH

這里要強調是使用log4cplus時,要 加上-llog4cplus -lrt -lpthread -lrt(或者 -llog4cplus -lpthread ),才能順利的編譯通過和使用;

 

 

確保你的Makefile中包含 /usr/local/lib/liblog4cplus.a(靜態庫)或-llog4cplus(動態庫)即可。

頭文件在/usr/local/include/log4cplus目錄下。

對於動態庫,要想正常使用,還得將庫安裝路徑加入到 LD_LIBRARY_PATH 中,以管理員身份登錄,在/etc/ld.so.conf中加入安裝路徑,這里是/usr/local/lib,然后執行 ldconfig使設置生效即可。

 

在其log4cplus官網http://log4cplus.sourceforge.net/codeexamples.html 里面自帶的三個例程。

 

 

 

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
配置
#ewindowsxport 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(&lt);
char* timetemp=ctime(&lt);
*(timetemp+strlen(timetemp)-1)='\0';
char temp[10000];
sprintf(temp,"[%s] %s",timetemp,info);
        printf("temp==%s",temp);
printf("leval====%s ",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(&lt);
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM