上帝保佑 - God4

God Bless

  :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
通过可变参数列表实现的一个通用日志类,类似于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
posted on 2007-09-29 21:25  God4  阅读(354)  评论(0)    收藏  举报