📄 log.cpp
字号:
//--------------------------------------------------
// Desc: The Implementation of CLog class
// Author: artsylee/2006.7.26
//--------------------------------------------------
#include "../stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include "Log.h"
CLog* g_pLog = NULL;
void __stdcall WriteLog(enum INFOTYPE info, const char *msg,...)
{
if(msg==NULL)
return;
char szBuf[LOG_BUF_SIZE];
va_list args;
va_start(args, msg);
vsprintf(szBuf, msg, args);
va_end(args);
if(g_pLog)
{
g_pLog->WriteLog(info, szBuf);
}
}
CLog::CLog()
{
m_fp = NULL;
ZeroMemory(m_LogBuffer, LOG_BUF_SIZE);
m_index = 0;
m_LogLevel = INFO_NORMAL;
}
CLog::CLog(const char *pFileName, bool append)
{
m_fp = NULL;
ZeroMemory(m_LogBuffer, LOG_BUF_SIZE);
m_index = 0;
StartLog(pFileName, append);
}
CLog::~CLog()
{
if(m_fp)
{
char szBuffer[128];
strcpy(szBuffer, "</body></html>\n");
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
fclose(m_fp);
}
}
bool CLog::StartLog(const char *pFileName, bool append)
{
if(pFileName==NULL)
{
return false;
}
if(m_fp)
{
fclose(m_fp);
m_fp = NULL;
}
if(append)
{
m_fp = fopen(pFileName, "a+");
if(m_fp==NULL)
{
MessageBox(NULL, "Open file failed!<CLog::StartLog>", "Failure", MB_OK);
return false;
}
fseek(m_fp, 0, SEEK_END);
unsigned filesize = ftell(m_fp);
fseek(m_fp, 0, SEEK_SET);
if(filesize>=MAX_FILE_SIZE)
{
fclose(m_fp);
m_fp = fopen(pFileName, "w");
if(m_fp==NULL)
{
MessageBox(NULL, "Open file failed!<CLog::StartLog>", "Failure", MB_OK);
return false;
}
}
}
else
{
m_fp = fopen(pFileName, "w");
if(m_fp==NULL)
{
MessageBox(NULL, "Open file failed!<CLog::StartLog>", "Failure", MB_OK);
return false;
}
}
char szBuffer[128];
char szCurTime[32];
char szCurDate[32];
_strtime(szCurTime);
_strdate(szCurDate);
strcpy(szBuffer, "<html><head><title>Log File</title></head><body>\n");
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
sprintf(szBuffer, "======================</br>\r\n", szCurDate, szCurTime);
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
sprintf(szBuffer, "= Artsylee 's Engine =</br>\r\n", szCurDate, szCurTime);
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
sprintf(szBuffer, "= Copyright (c) 2006 =</br>\r\n", szCurDate, szCurTime);
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
sprintf(szBuffer, "======================</br>\r\n", szCurDate, szCurTime);
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
strcpy(szBuffer, "<font face=\"Arial\" size=\"4\" color=\"#ff0000\"><b><u>");
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
sprintf(szBuffer, "Log File Create At [%s %s]</u></b></font><br>\r\n", szCurDate, szCurTime);
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
fflush(m_fp);
return true;
}
bool CLog::WriteLog(enum INFOTYPE info, const char *msg, ...)
{
m_index++;
int pos = 0;
pos += sprintf(m_LogBuffer+pos, "[%5d]", m_index);
char szTime[32];
_strtime(szTime);
pos += sprintf(m_LogBuffer+pos, "[%s]", szTime);
va_list args;
va_start(args, msg);
pos += _vsnprintf(m_LogBuffer+pos, LOG_BUF_SIZE-30, msg, args);
va_end(args);
char szBuffer[128];
if(info==INFO_ERROR)
{
// MessageBox output
m_LogBuffer[pos] = '\0';
MessageBox(NULL, m_LogBuffer, "Message", MB_OK);
if(m_fp)
{
strcpy(szBuffer, "<font face=\"Arial\" size=\"2\" color=\"#ff0000\">");
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
strcpy(&m_LogBuffer[pos], "</font><br>\r\n");
fwrite(m_LogBuffer, strlen(m_LogBuffer), 1, m_fp);
}
}
else if(info==INFO_WARNING)
{
// DebugString output
m_LogBuffer[pos] = '\r';
m_LogBuffer[pos+1] = '\n';
m_LogBuffer[pos+2] = '\0';
OutputDebugString(m_LogBuffer);
if(m_LogLevel<=INFO_WARNING && m_fp)
{
strcpy(szBuffer, "<font face=\"Arial\" size=\"2\" color=\"#0000ff\">");
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
strcpy(&m_LogBuffer[pos], "</font><br>\r\n");
fwrite(m_LogBuffer, strlen(m_LogBuffer), 1, m_fp);
}
}
else if(info==INFO_NORMAL)
{
if(m_LogLevel<=INFO_NORMAL && m_fp)
{
strcpy(szBuffer, "<font face=\"Arial\" size=\"2\" color=\"#ff00ff\">");
fwrite(szBuffer, strlen(szBuffer), 1, m_fp);
strcpy(&m_LogBuffer[pos], "</font><br>\r\n");
fwrite(m_LogBuffer, strlen(m_LogBuffer), 1, m_fp);
}
}
if(m_fp)
{
fflush(m_fp);
return true;
}
else
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -