#include "precompiled.h" #include "CLogger.h" #include "lib.h" #define CONSOLE_DEBUG #ifdef CONSOLE_DEBUG #include "CConsole.h" extern CConsole* g_Console; #endif using namespace std; #define MAIN_HEADER "\n
\n\n" \ "\n\n\n" \ "Engine exited successfully on " << __DATE__; m_MainLog << " at " << __TIME__ << buffer << "
\n"; m_MainLog << FOOTER; //Add end marker to logs in memory m_CurrentPosition = '\0'; m_DetailedLog << MEMORY_HEADER; m_DetailedLog << "Memory Log started with capacity of " << \ MEMORY_BUFFER_SIZE << " characters.
\n"; m_DetailedLog << m_MemoryLog; m_DetailedLog << FOOTER; m_DetailedLog.close (); m_MainLog.close (); free(m_MemoryLog); } void CLogger::WriteMessage(const char *message) { #ifdef CONSOLE_DEBUG g_Console->InsertMessage(L"LOG: %S", message); #endif m_NumberOfMessages++; m_MainLog << "" << message << "
"; m_MainLog.flush(); } void CLogger::WriteError(const char *message) { #ifdef CONSOLE_DEBUG g_Console->InsertMessage(L"ERROR: %S", message); #endif debug_out("ERROR: %s\n", message); m_NumberOfErrors++; m_MainLog << "ERROR: "<< message << "
\n"; m_MainLog.flush(); } void CLogger::WriteWarning(const char *message) { #ifdef CONSOLE_DEBUG g_Console->InsertMessage(L"WARNING: %S", message); #endif m_NumberOfWarnings++; m_MainLog << "WARNING: "<< message << "
\n"; m_MainLog.flush(); } void CLogger::Log(ELogMethod method, const char *fmt, ...) { va_list argp; char buffer[512]; memset(buffer,0,sizeof(buffer)); va_start(argp, fmt); vsnprintf(buffer, sizeof(buffer), fmt, argp); va_end(argp); if(method == NORMAL) WriteMessage(buffer); else if(method == ERROR) WriteError(buffer); else if(method == WARNING) WriteWarning(buffer); else WriteMessage(buffer); } void CLogger::QuickLog(const char *fmt, ...) { va_list argp; char buffer[512]; int count = 0; //Start a new paragraph in HTML strcpy(buffer,""); va_start(argp, fmt); vsnprintf(strchr(buffer, 0), sizeof(buffer), fmt, argp); va_end(argp); //add some html formatting strcat(buffer,"
"); if((m_CurrentPosition - m_MemoryLog + strlen(buffer) + 1) >= MEMORY_BUFFER_SIZE) { //not enough room in the buffer so don't log. return; } while(buffer[count] != '\0') { *m_CurrentPosition = buffer[count]; *m_CurrentPosition++; count++; } *m_CurrentPosition = '\n'; *m_CurrentPosition++; free(buffer); }