log4cplus是C++編寫的開源的日志系統,功能非常全面,用到自己開發的工程中會比較專業的,:),本文介紹了log4cplus基本概念,以及如何安裝,配置。
### 簡介 ###
log4cplus是C++編寫的開源的日志系統,前身是java編寫的log4j系統.受Apache Software License保護。作者是Tad E. Smith。log4cplus具有線程安全、靈活、以及多粒度控制的特點,通過將信息劃分優先級使其可以面向程序調試、運行、測試、和維護等全生命周期; 你可以選擇將信息輸出到屏幕、文件、NT event log、甚至是遠程服務器;通過指定策略對日志進行定期備份等等。
### 下載 ###
最新的log4cplus可以從以下網址下載 http://log4cplus.sourceforge.net本文使用的版本為:1.0.4
### 安裝 ###
1. linux下安裝
tar xvzf log4cplus-x.x.x.tar.gzcd log4cplus-x.x.x./configure --prefix=/where/to/install
make
make install
這里我采用缺省安裝路徑:/usr/local,下文如無特別說明,均以此路徑為準。
查看安裝后的目錄信息:

2.運行log4cplus實例:

官方實例運行成功。
3。與IDE集成測試。
這里,我使用的IDE為netbeans7.0采用samba實現linux與windows文件共享。
netbeans環境配置如下:




采用動態鏈接庫

編寫一個簡單的main.c
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <iomanip>

using namespace log4cplus;


int main(void)
{
BasicConfigurator config;
config.configure();

Logger logger = Logger::getInstance("main");
LOG4CPLUS_WARN(logger, "Hello, World!");
return 0;
}運行:
WARN - Hello, World!
運行成功(總計時間: 62毫秒)
常用的封裝后的使用:
vlog.h

/**//*
* File: vlog.h
* Author: Vicky
*
* 1.安裝log4cplus。
* 2.C++ 編譯器 : 其他選項 -lpthread -llog4cplus
* 3.C++ 連接器 : 運行時搜索目錄 /usr/local/lib
* Created on 2011年12月8日, 下午1:53
*/

#ifndef VLOG_H
#define VLOG_H

#include <log4cplus/logger.h>
#include <log4cplus/layout.h>
#include <log4cplus/loglevel.h>
#include <log4cplus/fileappender.h>
#include <log4cplus/consoleappender.h>

#include <log4cplus/helpers/loglog.h>

using namespace log4cplus;
using namespace helpers;


/**//**
* 使用log4cplus
* @param logfile 記錄的文件路徑,如“main.log”
* @param format 格式化前綴,默認%d [%l] %-5p : %m %n
* @param bebug 是否打印bebug信息,默認true
* @param lv 設置日記級別
* @return
*/
void initLog4cplus(
const char* logfile,
const bool console = true,
const bool bebug = true,
LogLevel lv = DEBUG_LOG_LEVEL,
const char* format = "%d %-5p [%c < %l] : %m %n"
);


/**//**
* 獲得根日志
* @return
*/
Logger getRootLogger(void);


/**//**
* 獲得子日志
* @param child 子日志名,如,sub;sub.sub1
* @return
*/
Logger getSubLogger(const char* sub);


/**//**
* 關閉日志系統
*/
void shutdownLogger(void);

#endif /* VLOG_H */


vlog.cpp
#include "vlog.h"

void initLog4cplus(const char* logfile, const bool console, const bool bebug,
LogLevel lv, const char* format)

/**//*
NOT_SET_LOG_LEVEL ( -1) :接受缺省的LogLevel,如果有父logger則繼承它的
LogLevelALL_LOG_LEVEL ( 0) :開放所有log信息輸出
TRACE_LOG_LEVEL ( 0) :開放trace信息輸出(即ALL_LOG_LEVEL)
DEBUG_LOG_LEVEL (10000) :開放debug信息輸出
INFO_LOG_LEVEL (20000) :開放info信息輸出
WARN_LOG_LEVEL (30000) :開放warning信息輸出
ERROR_LOG_LEVEL (40000) :開放error信息輸出
FATAL_LOG_LEVEL (50000) :開放fatal信息輸出
OFF_LOG_LEVEL (60000) :關閉所有log信息輸出

*/
{
// 0.日志系統配置:設置顯示debug信息
LogLog::getLogLog()->setInternalDebugging(bebug);


// 創建屏幕輸出Appender,不采用stderror流,不采用立刻寫入模式
SharedAppenderPtr pappender1(new RollingFileAppender(LOG4CPLUS_TEXT(logfile), 1024 * 1024, 10, false));
// 生成的日志文件名稱,文件最大值(最小1M),擴展文件個數,不采用立刻寫入模式

// 2.實例化一個layout對象
// 2.1創建layout布局格式
tstring pattern = LOG4CPLUS_TEXT(format);
std::auto_ptr<Layout> playout1(new PatternLayout(pattern));

// 3.將layout對象綁定(attach)到appender對象
// pappender.setLayout(std::auto_ptr<Layout> layout);
pappender1->setLayout(playout1);

// 4.Logger :記錄器,保存并跟蹤對象日志信息變更的實體,當你需要對一個對象進行記錄時,就需要生成一個logger。
Logger rootLogger = Logger::getRoot();

// 5.將appender對象綁定(attach)到logger對象,如省略此步驟,標準輸出(屏幕)appender對象會綁定到logger
rootLogger.addAppender(pappender1);


if (console)
{
// 1.Appenders :掛接器,與布局器緊密配合,將特定格式的消息輸出到所掛接的設備終端 (如屏幕,文件等等)。
SharedAppenderPtr pappender2(new ConsoleAppender(false, false));
std::auto_ptr<Layout> playout2(new PatternLayout(pattern));
pappender2->setLayout(playout2);
rootLogger.addAppender(pappender2);
}

// 6.設置logger的優先級,如省略此步驟,各種有限級的消息都將被記錄
rootLogger.setLogLevel(lv);
}


Logger getRootLogger(void)
{
return Logger::getRoot();
}


Logger getSubLogger(const char* sub)
{
return Logger::getInstance(LOG4CPLUS_TEXT(sub));
}


void shutdownLogger(void)
{
Logger::getRoot().shutdown();
}


main.cpp

/**//*
* File: main.cpp
* Author: Vicky
*
*/
#include "vlog.h"


/**//*
*
*/

int main(void)
{

// 初始化log4cplus
initLog4cplus("main.log");

// 日志對象:測試一
log4cplus::Logger test1 = getSubLogger("test1");
// 日志對象:測試一 第一次測試
log4cplus::Logger test1_01 = getSubLogger("test1.01");

// 類型日志記錄
LOG4CPLUS_DEBUG(test1_01, "you can log like this :" << "hello " << 100 << '!');

// 關閉日志
shutdownLogger();
return 0;
}

OK。unix下log4cplus的安裝,集成,測試!隨后我將講述Microsoft Visual Studio 2010下的安裝,集成,與測試。
運行時動態鏈接庫設置