c++实现 日志记录

来源:互联网 发布:js中跳转到网站 编辑:程序博客网 时间:2024/05/11 21:33
// logtest.cpp : 定义控制台应用程序的入口点。///************************************************************************//* author:郑金玮time:2014/07/03desc: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;  }

0 0
原创粉丝点击