www.pudn.com > CtrlIPClt.rar > RunLog.cpp


//////////////////////////////////////////////////////////////////////////////// 
//	项目名称:运行日志记录模块 
//	文件名称:HttpDownload.cpp 
//	实现功能:运行日志记录模块实现文件(C++实现) 
//	作    者:孙武 
//	编写日期:2003.8 
//                                                                               
//	修改历史(自下而上填写 内容包括:日期  修改人  修改说明)                                          
//  --------------------------------------------------------- 
//      日期        修改人       修改说明 
//  --------------------------------------------------------- 
//   2003-08-25      孙武		   创建 
// 
//  --------------------------------------------------------- 
// RunLog.cpp: implementation of the CRunLog class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "RunLog.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CRunLog::CRunLog() 
{ 
	// 获取运行程序名称 
	char szProgramName[MAX_PATH] = {0}; 
	::GetModuleFileName(NULL, szProgramName, sizeof(szProgramName)); 
 
	// 获取系统临时目录 
	char szTempPath[MAX_PATH] = {0}; 
	::GetTempPath(sizeof(szTempPath), szTempPath); 
 
	m_strLogFileName.Format("%s%s.log", szTempPath, strrchr(szProgramName, '\\')+1); 
	 
	m_bEnableWriteLog = FALSE; 
} 
 
CRunLog::~CRunLog() 
{ 
 
} 
 
void CRunLog::WriteLog(int nLogFlag, const char *format, ...) 
{ 
	CString strLog; 
 
	// 格式化运行日志信息 
	va_list vaList; 
	va_start(vaList, format); 
	strLog.FormatV(format, vaList); 
	va_end(vaList); 
 
	// 记录运行日志 
	WriteLog(nLogFlag, strLog); 
} 
 
void CRunLog::WriteDebugLog(const char *format, ...) 
{ 
	CString strLog; 
 
	// 格式化运行日志信息 
	va_list vaList; 
	va_start(vaList, format); 
	strLog.FormatV(format, vaList); 
	va_end(vaList); 
	 
	// 记录运行日志 
	WriteLog(RL_DEBUG, strLog); 
} 
 
void CRunLog::WriteWarningLog(const char *format, ...) 
{ 
	CString strLog; 
	 
	// 格式化运行日志信息 
	va_list vaList; 
	va_start(vaList, format); 
	strLog.FormatV(format, vaList); 
	va_end(vaList); 
	 
	// 记录运行日志 
	WriteLog(RL_WARNING, strLog); 
} 
 
void CRunLog::WriteErrorLog(const char *format, ...) 
{ 
	CString strLog; 
	 
	// 格式化运行日志信息 
	va_list vaList; 
	va_start(vaList, format); 
	strLog.FormatV(format, vaList); 
	va_end(vaList); 
	 
	// 记录运行日志 
	WriteLog(RL_ERROR, strLog); 
} 
 
void CRunLog::SetLogFilename(CString strLogFilename, BOOL bOverWriteIfExist) 
{ 
	if(!strLogFilename.IsEmpty()) 
	{ 
		m_strLogFileName = strLogFilename; 
		if(bOverWriteIfExist)	// 覆盖已经存在的日志文件 
		{ 
			DeleteLogFile(); 
		} 
	} 
} 
 
CString CRunLog::GetLogFilename() 
{ 
	return m_strLogFileName; 
} 
 
void CRunLog::EnableWriteLog(BOOL bEnable) 
{ 
	m_bEnableWriteLog = bEnable; 
} 
 
void CRunLog::DeleteLogFile() 
{ 
	if(!m_strLogFileName.IsEmpty()) 
	{ 
		::SetFileAttributes(m_strLogFileName, FILE_ATTRIBUTE_NORMAL); 
		CFile file; 
		DWORD dwFileLen = 0; 
		if(file.Open(m_strLogFileName, CFile::modeRead)) 
		{ 
			dwFileLen = file.GetLength(); 
			file.Close(); 
		} 
 
		if(dwFileLen > 128 * 1024)	// 如果日志已经超过128K,则清除 
		{ 
			::DeleteFile(m_strLogFileName); 
		} 
		else 
		{ 
			WriteDebugLog("\r\n\r\n====================== 新日志开始 ========================\r\n"); 
		} 
	} 
} 
 
void CRunLog::WriteLog(int nLogFlag, CString &strRunLog) 
{ 
	if(!m_bEnableWriteLog)	// 不允许记录运行日志 
	{ 
		return; 
	} 
	 
	// 获取系统时间 
	CTime time = CTime::GetCurrentTime(); 
	CString strTime, strLog; 
	 
	strTime.Format("%04d 年 %02d 月 %02d 日  %02d:%02d:%02d", time.GetYear(), time.GetMonth(), time.GetDay(),  \ 
		time.GetHour(), time.GetMinute(), time.GetSecond()); 
	 
	// 获取运行日志标志 
	if(nLogFlag == RL_DEBUG) 
	{ 
		strTime += "\t[调试信息]\r\n"; 
	} 
	else if(nLogFlag == RL_WARNING) 
	{ 
		strTime += "\t[警告信息]\r\n"; 
	} 
	else // if(nLogFlag == RL_ERROR) 
	{ 
		strTime += "\t[错误信息]\r\n"; 
	} 
	 
	// 写日志 
	CFile file; 
	if(!file.Open(m_strLogFileName, CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate)) 
	{ 
		return ; 
	} 
	 
	try 
	{ 
		file.Seek(0, CFile::end); 
		CString strTemp = "================================================================================\r\n"; 
		file.Write(strTemp, strTemp.GetLength()); 
		file.Write(strTime, strTime.GetLength()); 
		strTemp = "--------------------------------------------------------------------------------\r\n"; 
		file.Write(strTemp, strTemp.GetLength()); 
		file.Write(strRunLog, strRunLog.GetLength()); 
		 
		file.Write("\r\n\r\n", 4); 
	} 
	catch (...) 
	{ 
		file.Close(); 
		return ; 
	} 
	 
	file.Close(); 
}