Unuk 1.0
src/libUnuk/Debug.cpp
Go to the documentation of this file.
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(&timestamp) << 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(&timestamp) << 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 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines