頭文件:

/**//**********************************************************************
* Copyright (C) 2008 - - All Rights Reserved
*
* 文件名稱: LoggerModule.h
* 摘 要: 日志包裹類,日志模塊的接口
*
* 作 者: yanglinbo,
* 修 改: 查看文件最下方.
*
***********************************************************************/

#ifndef __LoggerModule_H__
#define __LoggerModule_H__


//導出定義
#ifndef LOGGER_MODULE_CLASS
#ifdef LOGGER_MODULE_DLL
#define LOGGER_MODULE_CLASS _declspec(dllexport)
#else
#define LOGGER_MODULE_CLASS _declspec(dllimport)
#endif
#endif

//模塊定義
#ifdef _DEBUG
#define LOGGER_MODULE_DLL_NAME TEXT("LoggerModuleD.dll") //組件 DLL 名字
#else
#define LOGGER_MODULE_DLL_NAME TEXT("LoggerModule.dll") //組件 DLL 名字
#endif



/**//// 包裹類
/// @note 在程序啟動的時候調(diào)用Logger::Start方法,例如:
/// g_Logger.StartSystem("logModule.properties");
/// 打日志的示例如下:
/// g_Logger.Debug(__FILE__, __LINE__, "Debug log[%d]", 100);
/// 用法基本上和printf()和CSting::Format()方法差不多。
/// 如果是VS2005以及以上的開發(fā)環(huán)境,可以使用宏打日志,更加方便:
/// LOG_DEBUG("Debug log[%d]", 100);
class LOGGER_MODULE_CLASS Logger


{
public:
Logger();
virtual ~Logger();


/**//// 啟動日志系統(tǒng)
/// @param[in] properties_filename 日志系統(tǒng)配置文件文件名
void StartSystem(const char* properties_filename);


/**//// 關(guān)閉日志系統(tǒng)
void StopSystem();

public:
void Debug(const char* filename, const int fileline, const char* pFormat,
);

void Error(const char* filename, const int fileline, const char* pFormat,
);

void Fatal(const char* filename, const int fileline, const char* pFormat,
);

void Info(const char* filename, const int fileline, const char* pFormat,
);

void Warn(const char* filename, const int fileline, const char* pFormat,
);

void Trace(const char* filename, const int fileline, const char* pFormat,
);

public:
static inline Logger* getSingletonPtr()

{
return &getSingleton();
}
static inline Logger& getSingleton()

{
static Logger _instance;
return _instance;
}
};
#define g_Logger Logger::getSingleton()
#define g_pLogger Logger::getSingleton()



/**///////////////////////////////////////////////////////////////////////////
// 斷言日志

/**///////////////////////////////////////////////////////////////////////////
#define ASSERT_LOG(expr)\

if ( (expr) )
{;} else g_Logger.Error(__FILE__, __LINE__, #expr);



/**///////////////////////////////////////////////////////////////////////////
// 以下的宏只有VS2005以及之上的版本可以使用!因為VS2005之下的版本不支持可變參數(shù)宏

/**///////////////////////////////////////////////////////////////////////////
#if defined(_MSC_VER) && _MSC_VER > 1400
#define LOG_DEBUG(
) g_Logger.Debug(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_ERROR(
) g_Logger.Error(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_FATAL(
) g_Logger.Fatal(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_INFO(
) g_Logger.Info(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_WARN(
) g_Logger.Warn(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_TRACE(
) g_Logger.Trace(__FILE__, __LINE__, __VA_ARGS__);
#endif


#endif

cpp文件:

/**//**********************************************************************
* Copyright (C) 2008 - - All Rights Reserved
*
* 文件名稱: LoggerModule.cpp
* 摘 要: 日志包裹類,日志模塊的接口
*
* 作 者: yanglinbo,
* 修 改: 查看文件最下方.
*
***********************************************************************/

#include "LoggerModule.h"

#include <cstdlib>
#include <iostream>
#include <log4cplus/config.hxx>
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/stringhelper.h>
#include <log4cplus/helpers/socket.h>
#include <log4cplus/helpers/threads.h>
#include <log4cplus/spi/loggerimpl.h>
#include <log4cplus/spi/loggingevent.h>
//#include <stdarg.h>

Logger::Logger()


{

}

Logger::~Logger()


{
log4cplus::Logger _logger = log4cplus::Logger::getRoot();
LOG4CPLUS_INFO(_logger, "Logger System Stop Finish.");
}

#define DO_LOGGER(logLevel, filename, fileline, pFormat, bufSize)\
log4cplus::Logger _logger = log4cplus::Logger::getRoot();\
\
if(_logger.isEnabledFor(logLevel))\


{ \
va_list args; \
va_start(args, pFormat); \

char buf[bufSize] =
{0}; \
_vsnprintf(buf, sizeof(buf), pFormat, args); \
va_end(args); \
_logger.forcedLog(logLevel, buf, filename, fileline); \
}

void Logger::Debug( const char* filename, const int fileline, const char* pFormat,
)


{
DO_LOGGER(log4cplus::DEBUG_LOG_LEVEL, filename, fileline, pFormat, 1024);
}

void Logger::Error( const char* filename, const int fileline, const char* pFormat,
)


{
DO_LOGGER(log4cplus::ERROR_LOG_LEVEL, filename, fileline, pFormat, 256);
}

void Logger::Fatal( const char* filename, const int fileline, const char* pFormat,
)


{
DO_LOGGER(log4cplus::FATAL_LOG_LEVEL, filename, fileline, pFormat, 256);
}

void Logger::Info( const char* filename, const int fileline, const char* pFormat,
)


{
DO_LOGGER(log4cplus::INFO_LOG_LEVEL, filename, fileline, pFormat, 512);
}

void Logger::Warn( const char* filename, const int fileline, const char* pFormat,
)


{
DO_LOGGER(log4cplus::WARN_LOG_LEVEL, filename, fileline, pFormat, 256);
}

void Logger::Trace( const char* filename, const int fileline, const char* pFormat,
)


{
DO_LOGGER(log4cplus::TRACE_LOG_LEVEL, filename, fileline, pFormat, 1024);
}

void Logger::StartSystem( const char* properties_filename )


{
if (properties_filename==NULL) return;

log4cplus::helpers::LogLog::getLogLog()->setInternalDebugging(false);
log4cplus::PropertyConfigurator::doConfigure(properties_filename);
log4cplus::Logger _logger = log4cplus::Logger::getRoot();
LOG4CPLUS_INFO(_logger, "Logger System Start Finish.");
}

void Logger::StopSystem()


{

}

自定義配置文件樣例:
# Define the root logger
log4cplus.rootLogger=TRACE, consoleAppender, fileAppender

# Define a file appender named "consoleAppender"
log4cplus.appender.consoleAppender=log4cplus::ConsoleAppender
log4cplus.appender.consoleAppender.layout=log4cplus::PatternLayout

log4cplus.appender.consoleAppender.layout.ConversionPattern=%-5p-[%t][%D
{%H:%M:%S %Q}]%m

# Define a file appender named "fileAppender"
log4cplus.appender.fileAppender=log4cplus::DailyRollingFileAppender
log4cplus.appender.fileAppender.MaxFileSize=200KB
log4cplus.appender.fileAppender.File=./log.log
log4cplus.appender.fileAppender.MaxBackupIndex=3
log4cplus.appender.fileAppender.layout=log4cplus::PatternLayout

log4cplus.appender.fileAppender.layout.ConversionPattern=%d
{%m/%d/%y %H:%M:%S} - %m [%l]%n

使用的例子:
g_Logger.StartSystem("logModule.properties");
g_Logger.Debug(__FILE__, __LINE__, "Debug log[%d]", 100);
打印出來的結(jié)果如下所示:
06/08/09 10:52:42 - Logger System Start Finish. [e:\workspace\共享組件\日志組件\loggermodule.cpp:32]
06/08/09 10:52:42 - Debug log[100] [e:\workspace\服務(wù)器組件\好友服務(wù)器\friendserverdlg.cpp:160]
06/08/09 10:52:44 - Logger System Stop Finish. [e:\workspace\共享組件\日志組件\loggermodule.cpp:38]
參考資料:1. 在VC2003中編譯x264
http://203.208.35.132/search?q=cache:iVR-sSgopycJ:xieliming.blogspot.com/2008/12/vc2003x264.html+%E5%AE%8F+%E5%8F%AF%E5%8F%98%E5%8F%82+vc2003&cd=7&hl=zh-CN&ct=clnk&gl=cn&client=aff-os-maxthon&st_usg=ALhdy28fuo_AwxsIvnD2K3IRGbPD8wlJJQ2. 我的Log4c
http://www.shnenglu.com/cool-liangbing/archive/2009/02/12/73532.html3.【原創(chuàng)】技術(shù)系列之 必備外圍功能-log
http://www.shnenglu.com/CppExplore/archive/2009/02/08/52216.html