MFC - 保存日志类(文本格式)

                                            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; //写入文件函数作为临界区
};

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MK-ZHENG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值