c++实现 日志记录

// logtest.cpp : 定义控制台应用程序的入口点。
///************************************************************************/
/* 
author:郑金玮
time:2014/07/03
desc:implement log instance in svc pro
*/
/************************************************************************/
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

#define DISALLOW_COPY_ASSIGN(typename) \
	private: \
	typename(const typename&); \
	typename operator = (const typename&);

class CLog
{
	DISALLOW_COPY_ASSIGN(CLog);
public:
	CLog();
	~CLog();
	static CLog* getinstance();
	bool open(const char szFile[]);
	void log(const char* fmt,...);


private:
	FILE* m_pfile;
};


#define LOGINSTANCE()   CLog::getinstance()

CLog::CLog()
{

}
CLog::~CLog()
{

	if (fclose(m_pfile) !=0)
	{
		return;
	}
}
CLog* CLog::getinstance() 
{
	static CLog _logInst;
	return &_logInst;
}
bool CLog::open(const char szFile[])
{
	if ((m_pfile = fopen(szFile,"a"))== NULL)
	{
		return false;
	}

	return true;
}

void CLog::log(const char* fmt,...)
{
	va_list ap;  
	va_start(ap, fmt);//将ap指向fmt后的第一个参数  

	char _strtemp[1024];
	memset(_strtemp,0,1024);

	while(*fmt)
	{
		if(*fmt == '%')
		{
			switch(*(++fmt))
			{
			case 'd':{
				char _str[256];
				sprintf(_str,"%d",va_arg(ap, int));
				strcat(_strtemp,_str);
					 }break;
			case 'f':{
				char _str[256];
				double _dval=va_arg(ap, double);
				_gcvt(_dval,8,_str);
				strcat(_strtemp,_str);
					 }break;
			case 's':{
				strcat(_strtemp,va_arg(ap, char*));
					 }break;
			default:break;
			}
		}
		else
		{
			char _str[256];
			sprintf(_str,"%c",*fmt);
			strcat(_strtemp,_str);
		}
		fmt ++;
	}

	printf("\n");
	printf(_strtemp);
	printf("\n");

	fputs("\n",m_pfile);
	fputs(_strtemp,m_pfile);
	fputs("\n",m_pfile);
	va_end(ap);
}

#define PRINTLOG   LOGINSTANCE()->log  

int _tmain(int argc, _TCHAR* argv[])  
{  

	LOGINSTANCE()->open("..//test.log");  
	//LOGINSTANCE()->log("%s-welcome to beijing---%d------%f","zhengjinwei ",23,23.11);  
	PRINTLOG("%s: welcome to beijing---%d------%f","zhengjinwei ",23,23.11);
	return 0;  
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值