当真是一点点磨出来,刚开始接触的时候一脸懵*,百度头几篇文章不知道看了多少便。
记录一下:
首先是源文件的编译,(我已开始就不知道怎么编译),用vs2010,或者vs2012打开源文件中的msvc10中的解决方案,选择你想要的方案右击build/reBuild,我选的是log4cplusS。先编译一个Debug_Unicode版本的,在msvc10下Win32下有对应库。
新建一个工程,在源文件目录下复制log4cplus的头文件include文件夹和刚刚生成的那个库。在工程中配置包含头文件目录和库文件目录。分别是C/C++ --》Additional Include Directories添加include路径 和Linker --》Additional Library Directories 下添加库文件路径。
接下来就是添加库(我搞不清动态库还是静态库)。有两种方法,一种是在Linker--》Input--》Additional Dependencies下添加库名称;或者就是#pragma comment(lib,"name of lib")链接库。
release也是一样的。
下面就是log4cplus的使用了。
封装啊封装,我把我的写的贴上来,不,是抄的,抄的 ,抄的,重要的事说三遍。
log.cpp :
#include
#include
#include
#include
#include
#include
#include
#include
#ifndef _WIN32
#include
#define _snprintf snprintf
#else
#include
#endif
#include "Log.h"
#pragma comment(lib,"log4cplusSU")
using namespace log4cplus;
#include
#define kMaxLogStringLen 3970
CLog sLog;
CLog::CLog(void)
{
SharedAppenderPtr append_1(new RollingFileAppender(LOG4CPLUS_TEXT("..\\Release\\Log\\Test.log"), 20*1024*1024, 10));
//SharedAppenderPtr append_1(new DailyRollingFileAppender(_T("Test.log"),MINUTELY,true,5));
append_1->setName(_T("first"));
/* step 2: Instantiate a layout object */
tstring pat = _T("%D{%m/%d/%y %H:%M:%S} | %-5p | - %m[%l]%n");
std::auto_ptr _layout(new PatternLayout(pat));
//append_1->setLayout( std::auto_ptr(new TTCCLayout()) );
/* step 3: Attach the layout object to the appender */
append_1->setLayout( _layout );
Logger::getRoot().addAppender(append_1);
root = Logger::getRoot();
logger1 = Logger::getInstance(_T("test"));
_logger = Logger::getInstance(_T("test.subtestof_filelog"));
}
CLog::~CLog(void)
{
}
void CLog::DoLogger(const char* filename, const int fileline,int level,const char* format)
{
char tempBuffer[kMaxLogStringLen] = {0};
va_list arg;
va_start(arg, format);
vsprintf(&tempBuffer[strlen(tempBuffer)], format, arg);
va_end(arg);
//strcat(tempBuffer, "\n");
log4cplus::tostringstream _log4cplus_buf;
_log4cplus_buf<
#pragma once
#include
#include
#include
#include
#include
#include
//#include
class CLog
{
public:
CLog(void);
~CLog(void);
private:
//SharedAppenderPtr _append;
log4cplus::Logger _logger;
log4cplus::Logger root;
log4cplus::Logger logger1;
void DoLogger(const char* filename, const int fileline,int level,const char* format);
public:
//void Log(const char* format, ...);
//void Test();
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, ... );
};
#ifdef __cplusplus
extern "C"
{
#endif
extern CLog sLog;
#ifdef __cplusplus
}
#endif
#if defined(_MSC_VER) && _MSC_VER > 1400
#define LOG_DEBUG(...) sLog.Debug(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_ERROR(...) sLog.Error(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_FATAL(...) sLog.Fatal(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_INFO(...) sLog.Info(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_WARN(...) sLog.Warn(__FILE__, __LINE__, __VA_ARGS__);
#define LOG_TRACE(...) sLog.Trace(__FILE__, __LINE__, __VA_ARGS__);
#endif
自己随便写的,抄的某个大侠的。