通过可变参数列表实现的一个通用日志类,类似于printf函数。
// Log.h: interface for the CLog class.
//
//////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

#ifdef UNICODE

#define tfopen _wfopen
#define tfprintf fwprintf
#define tsprintf swprintf
#define tvfprintf vfwprintf

#else //!UNICODE

#define tfopen fopen
#define tfprintf fprintf
#define tsprintf sprintf
#define tvfprintf vfprintf

#endif

class CLog
{
public:
TCHAR * GetFileName();
BOOL GetTimeStr(TCHAR * szStr);
INT Write(TCHAR *szFormat,
);
INT SimWrite(TCHAR * szFormat,
);
BOOL Init(TCHAR * szFile, TCHAR * szType);
BOOL Init(TCHAR * szFile);
CLog();
virtual ~CLog();

private:
FILE * fp;
TCHAR szFileName[MAX_PATH];
TCHAR szOpenType[4];
};
#include "Log.h"

CLog::CLog()
{
fp = NULL;
szFileName[0] = 0;
szOpenType[0] = 0;
}

CLog::~CLog()
{
if(fp)
{
fclose(fp);
fp = NULL;
}
}

BOOL CLog::Init(TCHAR * szFile)
{
return Init(szFile, TEXT("a+"));
}

BOOL CLog::Init(TCHAR * szFile, TCHAR * szType)
{
if( fp==NULL && szType && szType[0] && lstrlen(szType)<4
&& szFile && szFile[0] && lstrlen(szFile)<MAX_PATH )
{
lstrcpy(szFileName, szFile);
lstrcpy(szOpenType, szType);
fp = tfopen(szFile, szType);

return (BOOL)fp;
}

return FALSE;
}

INT CLog::SimWrite(TCHAR *szFormat,
)
{
va_list va;
INT rst = -1;

va_start(va, szFormat);
rst = tvfprintf(fp, szFormat, va);
fflush(fp);
va_end(va);

return rst;
}

INT CLog::Write(TCHAR *szFormat,
)
{
va_list va;
INT rst = -1;
TCHAR szTimeStr[] = TEXT("YYYY-MM-DD hh:mm:ss ");

if(GetTimeStr(szTimeStr))
{
szTimeStr[19] = TEXT(' ');
va_start(va, szFormat);

tfprintf(fp, szTimeStr);
rst = tvfprintf(fp, szFormat, va);
fflush(fp);

va_end(va);
}

return rst;
}

BOOL CLog::GetTimeStr(TCHAR *szStr)
{
SYSTEMTIME sTime = {0};
GetLocalTime(&sTime);

return (tsprintf(szStr, TEXT("%04d-%02d-%02d %02d:%02d:%02d"), sTime.wYear,
sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond)>=0);
}

TCHAR * CLog::GetFileName()
{
return szFileName;
}
代码:/Files/God4/Log.rar
// Log.h: interface for the CLog class.
//
//////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#ifdef UNICODE
#define tfopen _wfopen
#define tfprintf fwprintf
#define tsprintf swprintf
#define tvfprintf vfwprintf
#else //!UNICODE
#define tfopen fopen
#define tfprintf fprintf
#define tsprintf sprintf
#define tvfprintf vfprintf
#endif
class CLog
{
public:
TCHAR * GetFileName();
BOOL GetTimeStr(TCHAR * szStr);
INT Write(TCHAR *szFormat,
);
INT SimWrite(TCHAR * szFormat,
);
BOOL Init(TCHAR * szFile, TCHAR * szType);
BOOL Init(TCHAR * szFile);
CLog();
virtual ~CLog();
private:
FILE * fp;
TCHAR szFileName[MAX_PATH];
TCHAR szOpenType[4];
};
#include "Log.h"
CLog::CLog()
{
fp = NULL;
szFileName[0] = 0;
szOpenType[0] = 0;
}
CLog::~CLog()
{
if(fp)
{
fclose(fp);
fp = NULL;
}
}
BOOL CLog::Init(TCHAR * szFile)
{
return Init(szFile, TEXT("a+"));
}
BOOL CLog::Init(TCHAR * szFile, TCHAR * szType)
{
if( fp==NULL && szType && szType[0] && lstrlen(szType)<4
&& szFile && szFile[0] && lstrlen(szFile)<MAX_PATH )
{
lstrcpy(szFileName, szFile);
lstrcpy(szOpenType, szType);
fp = tfopen(szFile, szType);
return (BOOL)fp;
}
return FALSE;
}
INT CLog::SimWrite(TCHAR *szFormat,
)
{
va_list va;
INT rst = -1;
va_start(va, szFormat);
rst = tvfprintf(fp, szFormat, va);
fflush(fp);
va_end(va);
return rst;
}
INT CLog::Write(TCHAR *szFormat,
)
{
va_list va;
INT rst = -1;
TCHAR szTimeStr[] = TEXT("YYYY-MM-DD hh:mm:ss ");
if(GetTimeStr(szTimeStr))
{
szTimeStr[19] = TEXT(' ');
va_start(va, szFormat);
tfprintf(fp, szTimeStr);
rst = tvfprintf(fp, szFormat, va);
fflush(fp);
va_end(va);
}
return rst;
}
BOOL CLog::GetTimeStr(TCHAR *szStr)
{
SYSTEMTIME sTime = {0};
GetLocalTime(&sTime);
return (tsprintf(szStr, TEXT("%04d-%02d-%02d %02d:%02d:%02d"), sTime.wYear,
sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond)>=0);
}
TCHAR * CLog::GetFileName()
{
return szFileName;
}
代码:/Files/God4/Log.rar
一天一点进步


浙公网安备 33010602011771号