MFC - 保存日志类(文本格式)
实现功能:把相关信息保存成text文本保存起来,作为日志查看。
#include "stdafx.h"
#include "LogTxt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CLogTxt::CLogTxt()
{
mFilePrefix = _T("untitled");
mTime = CTime::GetCurrentTime();
mFileName.Format(_T("%s\\Log\\%s%s.log"),GetAppPath(),mFilePrefix,mTime.Format(_T("%Y-%m-%d")));
#ifdef _DEBUG
IsLog = true;
#else
IsLog = false;
#endif
}
CLogTxt::~CLogTxt()
{
}
void CLogTxt::SetPrefix(CString vPrefix)
{
mFilePrefix = vPrefix;
}
CString CLogTxt::GetPrefix(void)
{
return mFilePrefix;
}
//获取程序路径
CString CLogTxt::GetAppPath()
{
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
return sPath;
}
bool CLogTxt::Log(CString vLog)
{
CSingleLock FileLock(&Lock_FileWrite);
FileLock.Lock();
if(IsLog == false) return true;
mTime = CTime::GetCurrentTime();
mFileName.Format(_T("%s\\Log\\%s%s.log"),GetAppPath(),mFilePrefix,mTime.Format(_T("%Y-%m-%d")));
CFile f;
CString mLog;
int fopencnt = 0;
bool fopen = false;
while(fopencnt < 32)
{
if(f.Open(mFileName,CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate))
{
fopen = true;
f.SeekToEnd();
break;
}
fopencnt ++;
Sleep(120);
}
if(!fopen)
{
return false;
}
mLog.Format(_T("%s----%s\r\n"),mTime.Format(_T("%Y-%m-%d %H:%M:%S")),vLog);
f.Write(mLog,mLog.GetLength());
f.Flush();
f.Close();
return true;
}
#pragma once
#include <afxmt.h>
class CLogTxt:
{
public:
CLogTxt();
virtual ~CLogTxt();
void SetPrefix(CString vPrefix);
CString GetPrefix(void);
bool Log(CString vLog);
CString GetAppPath();
bool IsLog;
private:
CString mFilePrefix;
CString mFileName;
CTime mTime;
CCriticalSection Lock_FileWrite; //写入文件函数作为临界区
};