⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 log.cpp

📁 一个自己写的游戏引擎,用DirectX 写成
💻 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 + -