log4cplus的使用(学习笔记)


当真是一点点磨出来,刚开始接触的时候一脸懵*,百度头几篇文章不知道看了多少便。


记录一下:

首先是源文件的编译,(我已开始就不知道怎么编译),用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<

Log.h:

#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


自己随便写的,抄的某个大侠的。



你可能感兴趣的:(mfc)