![]() |
Unuk 1.0
|
00001 #include <iostream> 00002 #include <fstream> 00003 #include <cstdarg> 00004 #include <ctime> 00005 #include "Debug.h" 00006 #include "string" 00007 00008 00009 using namespace std; 00010 00011 // =================================================================== 00012 // The Debug log allows us to display ever piece of data that 00013 // populates our class components, anything that is loaded, serialized, 00014 // de-serialized etc will be printed out to a text file. 00015 // (Running our program in a terminal, this debug log will print to it.) 00016 // =================================================================== 00017 00018 Debug *Debug::logger = NULL; 00019 00020 Debug::Debug(bool logToFile) { 00021 time_t timestamp; 00022 if(logToFile) { 00023 logFile.open("../Bin/Debug.log", ios::out); 00024 if(!logToFile) { 00025 // We can not open our log. 00026 cerr << "Warning: Can not open Debug.log to write, continueing without logging\n"; 00027 } else { 00028 // Log File is open, let us give it a nice time stamp. 00029 timestamp = time(NULL); 00030 logFile << "Log Started: " << ctime(×tamp) << endl; 00031 } 00032 } 00033 } 00034 00035 Debug::~Debug(void) { 00036 time_t timestamp; 00037 00038 // We only need to close the log if it is open. 00039 if(logFile) { 00040 // Give it a closing timestamp. 00041 timestamp = time(NULL); 00042 logFile << endl << "Log Closed: " << ctime(×tamp) << endl; 00043 00044 // Close the log file. 00045 logFile.close(); 00046 } 00047 } 00048 00049 void Debug::message(std::string msg) { 00050 if(logFile) { 00051 logFile << msg << endl; 00052 } 00053 cerr << msg << endl << endl; 00054 } 00055 00056 void Debug::message(const char *msg, ...) { 00057 va_list vargList; // This is to handlle the variable arguments 00058 00059 char outBuf[1024]; 00060 unsigned short outLen; 00061 00062 // This takes the arguments and puts them into the character array. 00063 va_start(vargList, msg); 00064 00065 #if defined WIN32 00066 outLen = _vsnprintf(outBuf, sizeof(outBuf), msg, vargList); 00067 #else 00068 outLen = vsnprintf(outBuf, sizeof(outBuf), msg, vargList); 00069 #endif 00070 00071 va_end(vargList); 00072 00073 if(outLen >= sizeof(outBuf)) { 00074 outLen = sizeof(outBuf); 00075 } 00076 00077 if(logFile) { 00078 logFile << outBuf << endl; 00079 } 00080 00081 cerr << outBuf << endl; 00082 } 00083 00084 bool Debug::openLog(bool logToFile) { 00085 // Make sure the logger has not already been initialized. 00086 if(logger != NULL) { 00087 logger->message("Warning: Multiple calls to openLog()."); 00088 return false; 00089 } 00090 logger = new Debug(logToFile); 00091 return true; 00092 } 00093 00094 void Debug::closeLog(void) { 00095 if(logger == NULL) { 00096 cerr << "Warning: Call to closeLog() with NULL logger pointer." << endl; 00097 return; 00098 } 00099 delete logger; 00100 logger = NULL; 00101 }