/** \file LogManager.cpp * Defines the LogManager class. * * @author Vovansim (aka Scorpion) * @version Version 1.0 * @date September 13, 2003 */ #include "LogManager.h" //============================================= LogManager::LogManager ======// LogManager::LogManager() { if(!LoadStrings()) { Write(LET_Warning, "LogManager: Failed to load pre-defined strings. Check existence of \"messages.txt\"."); } Write(LET_Application, "Log Manager Initialized"); } //============================================ LogManager::~LogManager ======// LogManager::~LogManager() { Write(LET_Application, "Log Manager Destroyed"); messageStrings.clear(); if(applicationStream.is_open()) { applicationStream.close(); } if(graphicsStream.is_open()) { graphicsStream.close(); } if(warningStream.is_open()) { warningStream.close(); } if(debugStream.is_open()) { debugStream.close(); } } //======================================= bool LogManager::LoadStrings ======// bool LogManager::LoadStrings() { std::ifstream in("messages.txt"); if(!in.is_open()) { return false; } while(!in.eof()) { char szBuf[1024]; in.getline(szBuf,1024); messageStrings.push_back(szBuf); } return true; } //============================================= void LogManager::Write ======// void LogManager::Write(LogEntryType messageType, const char *msg, ...) { va_list args; va_start(args,msg); char buffer[1024]; vsprintf(buffer, msg, args); if(messageType == LET_FatalError) { fprintf(stderr, buffer); return; } switch(messageType) { case LET_Debug: if(!debugStream.is_open()) { debugStream.open("debug.log"); } debugStream << buffer << "\n"; debugStream.flush(); break; case LET_Graphics: if(!graphicsStream.is_open()) { graphicsStream.open("graphics.log"); } graphicsStream << buffer << "\n"; graphicsStream.flush(); break; case LET_Warning: if(!warningStream.is_open()) { warningStream.open("warnings.log"); } warningStream << buffer << "\n"; warningStream.flush(); break; case LET_Application: default: if(!applicationStream.is_open()) { applicationStream.open("application.log"); } applicationStream << buffer << "\n"; applicationStream.flush(); break; } va_end(args); } //============================================= void LogManager::Write ======// void LogManager::Write(LogEntryType messageType, unsigned long msgID, ...) { va_list args; va_start(args, msgID); char buffer[1024]; vsprintf(buffer, messageStrings[msgID].c_str(), args); Write(messageType, buffer); va_end(args); }