C++实现一个简洁而又强大的日志记录类

代码执行时记录日志是很有必要的,尤其在涉及到多进程、多线程调试或者是调试服务程序时。本分分享一个最近写的简单的日志类,希望有所帮助。不喜欢废话,上代码了:

头文件如下:

#pragma once
#include 
using std::string;
using std::wstring;

class CSimpleLog
{
public:
	CSimpleLog(void);
	~CSimpleLog(void);
	void	Write(const char* pSourcePath, const char* pFunName, const long lLine, const char* pLogText);
	void	Write(const char* pSourcePath, const char* pFunName, const long lLine, const wchar_t* pLogText);
	void	ScanfWrite(const char* pSourcePath, const char* pFunName, const long lLine, \
		const char* pLogText, ...);
	void	ScanfWrite(const char* pSourcePath, const char* pFunName, const long lLine, \
		const wchar_t* pLogText, ...);
protected:
	string	GetTime();
	string	U2A(const wstring& str);
};

extern CSimpleLog	g_log;

#define SL_LOG(x)				g_log.Write(__FILE__, __FUNCTION__, __LINE__, x)
#define SL_LOG1(x, p1)			g_log.ScanfWrite(__FILE__, __FUNCTION__, __LINE__, x, p1)
#define SL_LOG2(x, p1, p2)		g_log.ScanfWrite(__FILE__, __FUNCTION__, __LINE__, x, p1, p2)
#define SL_LOG3(x, p1, p2, p3)	g_log.ScanfWrite(__FILE__, __FUNCTION__, __LINE__, x, p1, p2, p3)

实现文件:

 

 

#include "StdAfx.h"
#include "SimpleLog.h"
#include 

CSimpleLog	g_log;
const char* g_pLogPath="c:\\simple.log";
CSimpleLog::CSimpleLog(void)
{
}

CSimpleLog::~CSimpleLog(void)
{
}

void CSimpleLog::Write( const char* pSourcePath, const char* pFunName, \
					   const long lLine, const char* pLogText )
{
	if ( pLogText == NULL )
		return ;
	int nLogLen=strlen(pLogText);
	if ( nLogLen == 0 )
		return ;
	int nSourceLen=strlen(pSourcePath);
	int nFunLen	=strlen(pFunName);
	char szLine[10]={0};
	sprintf_s(szLine, "%ld", lLine);
	int nLineLen=strlen(szLine);
	int nSpaceLen=80-nSourceLen-nFunLen-nLineLen;
	string strTime=GetTime();
	FILE* fp=NULL;
	fopen_s(&fp, g_pLogPath, "a+");
	fwrite(strTime.c_str(), strTime.size(), 1, fp);
	fwrite(" ", 1, 1, fp);
	fwrite(pSourcePath, nSourceLen, 1, fp);
	for (int i=0; i


这里把日志记录目录固定了,你也可以扩展下,提供一个设置保存路径的接口,或者是日志到了多大就换个文件来存储之类的。

 

如何使用?

你只需要在需要记录日志的地方加上宏:

SL_LOG
SL_LOG1
SL_LOG3
1,2,3分别表示的是参数的个数,至于参数的类型和C语言格式化输出一样的。

C++实现一个简洁而又强大的日志记录类_第1张图片

日志输出结果包含:时间、文件名、函数名、日志内容。

 

 

你可能感兴趣的:(C/C++基础)