代码如下
//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);
}
个人很喜欢这个,觉得很简介,而且很实用!