// 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;
}
c++实现 日志记录
最新推荐文章于 2024-08-11 21:19:45 发布