代码如下

//log.h file

#define BUFFER_SIZE 4096
class CTraceFile : public CStdioFile  //继承自CStdioFile的一个类
{
public:   
    CTraceFile(){ }
    ~CTraceFile(){}
    CTraceFile::OpenLogFile(LPCTSTR lpszFileName, UINT nOpenFlags);//打开log文件,名字自己命名
    void CTraceFile::log(LPCTSTR lpszFormat, ...);
};

 

//lgo.cpp file

// 输入log的文件名

CTraceFile::OpenLogFile(LPCTSTR lpszFileName, UINT nOpenFlags)
{
    CStdioFile::Open(lpszFileName, nOpenFlags);
}

// 真正的打印函数,格式与printf一样

void CTraceFile::log(LPCTSTR lpszFormat, ...)
{

    va_list args;
    va_start(args, lpszFormat);   
    CHAR szBuffer[BUFFER_SIZE];
    char szBufferInfo[200];
    COleDateTime temp = COleDateTime::GetCurrentTime();

//首先打印时间信息到文件

    sprintf(szBufferInfo, "\n[%d/%d/%d %d:%d:%d]    ",temp.GetYear(), temp.GetMonth(),temp.GetDay(),
        temp.GetHour(),temp.GetMinute(),temp.GetSecond());
    WriteString(szBufferInfo);

//打印log信息到文件
    _vsntprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);
    ASSERT(m_pStream);
    WriteString(szBuffer);   
    va_end(args);

// 输出到文件,怕系统缓存了一部分数据,如果程序非法关闭,会导致丢失重要的log信息
    Flush();

}

 

我的log实例如下:

定义一个全局的对象logTrace。这样程序的各个地方都可以使用。

CTraceFile logTrace;

在程序启动的地方加入如下函数,主要是打开log文件。为后面的输出log信息做准备。

void CreateLogFile()
{
    char DestDirBuf[512];

    //文件位于程序同一目录下的log.txt

    GetSystemDirectory(DestDirBuf, 512);
    DestDirBuf[3] = '\0';

    strcat(DestDirBuf, SETUP_DSTDIR);
    CreateDirectory(DestDirBuf, NULL);
    strcat(DestDirBuf, \\Log.txt);

//注意程序下次的启动会覆盖上一次的数据。如果不想覆盖可以加上打开的flag. CFile::modeNoTruncate
    logTrace.OpenLogFile(DestDirBuf, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite);


}

 

个人很喜欢这个,觉得很简介,而且很实用!