VC++6.0自定义实现日志记录到文件及界面显示

1,实现日志记录到文件,支持日志文件大小限制,节省空间

void CController::LogWriteRecord(CString strText,CString strFileName)
{
	CStdioFile csFile;
	try
	{
		BOOL bRet = csFile.Open(strFileName,CFile::modeCreate
			|CFile::modeNoTruncate
			|CFile::modeReadWrite|CFile::shareDenyNone|CFile::typeText);
		csFile.SeekToEnd();
		CString strWriteText=strText+"\r\n";
		csFile.WriteString(strWriteText);
		//csFile.Write(strWriteText.GetBuffer(strWriteText.GetLength()),1);
		strWriteText.ReleaseBuffer();
		DWORD64 dwFileLen = csFile.GetLength();
		
		if(!bRet)
		{
			TRACE("Open failed exception\r\n");	
		}
		if(dwFileLen > constIFileMaxLen)
		{
			csFile.Seek(-constIFileMaxLen,CFile::end);
			char *pcBuf = new char[constIFileMaxLen];
			memset(pcBuf,0,constIFileMaxLen);
			csFile.Read(pcBuf,constIFileMaxLen);
			int iLoop = 0;
			for( iLoop = 0;iLoop<constIFileMaxLen;iLoop++)
			{
				if(0x0a == pcBuf[iLoop])
				{
					break;			
				}
			}
			iLoop++;
			csFile.SeekToBegin();
			csFile.Write(pcBuf+iLoop,constIFileMaxLen-iLoop);
			csFile.SetLength((DWORD)constIFileMaxLen-iLoop);
			delete [] pcBuf;
			pcBuf = NULL;
		}
		csFile.Flush();
		csFile.Close();
	}
	catch (...)
	{
		csFile.Close();
		TRACE("Write log exception\r\n");	
	}
}
void CController::LogWriteOneRecord(CString strFunction,CString strType,CString strText)
{
	CDuplicatefilesclearDlg *pDlg = (CDuplicatefilesclearDlg*)m_pDlg;
	//LogWriteRecord("["+ CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S")+"]"+strText,GetLogFileName());
	
	TRACE(strText);
	TRACE("\r\n");
	m_strWriteText=("["+ CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S")+"]"+strFunction+"() "+strType+strText);
	LogWriteRecord(m_strWriteText,GetLogFileName());
	
	//显示到界面

	pDlg->AppendLog(strText);
	
	
}

2,实现记录到UI Edit控件

2.1使用Edit控件,使用多行模式

2.2 编写ApendLog UI函数

void CDuplicatefilesclearDlg::AppendLog(CString str)
{
	CString strText;
	GetDlgItemText(IDC_EDIT_Msg,strText);
	strText += "\r\n";
	strText += str;
	if(strText.GetLength() > 10240)
	{
		strText= strText.Right(strText.GetLength()/2);
	}
	SetDlgItemText(IDC_EDIT_Msg,strText);
	
	int nLen = ((CEdit*)GetDlgItem(IDC_EDIT_Msg))->SendMessage(WM_GETTEXTLENGTH);
	((CEdit*)GetDlgItem(IDC_EDIT_Msg))->SetSel(nLen, nLen, FALSE);
}

2.3 使用代码

	m_pControl = new CController(this);
	m_pControl->LogWriteOneRecord("CDuplicatefilesclearDlg::OnInitDialog()","[I] "," CDuplicatefilesclearDlg::OnInitDialog()函数...");

2.5运行结果

完整代码上传到资源,欢迎下载!

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 06:58:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 06:58:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 06:58:03       82 阅读
  4. Python语言-面向对象

    2024-05-16 06:58:03       91 阅读

热门阅读

  1. 分布式websocket实时通讯的session共享问题

    2024-05-16 06:58:03       31 阅读
  2. 安卓手机APP开发__支持64位的架构

    2024-05-16 06:58:03       30 阅读
  3. 16 | 缓存策略:如何使用缓存来减少磁盘IO?

    2024-05-16 06:58:03       34 阅读
  4. 如何玩转github

    2024-05-16 06:58:03       31 阅读
  5. Pinia:Vue 的强大存储库

    2024-05-16 06:58:03       36 阅读
  6. NIUKE Python:Python入门(上)

    2024-05-16 06:58:03       30 阅读
  7. python脚本编辑oss文件

    2024-05-16 06:58:03       29 阅读
  8. linux编译gdb

    2024-05-16 06:58:03       36 阅读
  9. springboot集成dubbo实现微服务系统

    2024-05-16 06:58:03       34 阅读