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();
}