diff options
-rw-r--r-- | src/log.cpp | 92 | ||||
-rw-r--r-- | src/log.h | 39 |
2 files changed, 129 insertions, 2 deletions
diff --git a/src/log.cpp b/src/log.cpp index e2f0ac36..da6d8fb2 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -26,12 +26,100 @@ FILE* logfile; -#define LOG_FILE "tmw.log" +Logger::Logger(std::string logFilename) +{ + logFile.open("tmw.log"); + if ( !logFile.is_open() ) + { + std::cout << "Warning: error while opening log file." << std::endl; + } + +} + +Logger::~Logger() +{ + logFile.close(); +} + +void Logger::log(std::string log_text) +{ + if ( logFile.is_open() ) + { + // Time container + time_t t; + // Get the current system time + time(&t); + + // Print the log entry + std::string dateString = "["; + dateString += ((((t / 60) / 60) % 24 < 10) ? "0" : ""); + dateString += (((t / 60) / 60) % 24); + dateString += ":"; + dateString += (((t / 60) % 60 < 10) ? "0" : ""); + dateString += ((t / 60) % 60); + dateString += ":"; + dateString += ((t % 60 < 10) ? "0" : ""); + dateString += (t % 60); + dateString += "] "; + + // Print the log entry + logFile << dateString << log_text << std::endl; + } +} + +void Logger::log(const char *log_text, ...) +{ + if ( logFile.is_open() ) + { + char* buf = new char[1024]; + va_list ap; + time_t t; + + // Use a temporary buffer to fill in the variables + va_start(ap, log_text); + vsprintf(buf, log_text, ap); + va_end(ap); + + // Get the current system time + time(&t); + + // Print the log entry + std::string dateString = "["; + dateString += ((((t / 60) / 60) % 24 < 10) ? "0" : ""); + dateString += (((t / 60) / 60) % 24); + dateString += ":"; + dateString += (((t / 60) % 60 < 10) ? "0" : ""); + dateString += ((t / 60) % 60); + dateString += ":"; + dateString += ((t % 60 < 10) ? "0" : ""); + dateString += (t % 60); + dateString += "] "; + dateString += buf; + + logFile << dateString << std::endl; + + // Delete temporary buffer + delete[] buf; + } +} + +void Logger::error(const std::string &error_text) +{ + log(error_text); + +#ifdef WIN32 + MessageBox(NULL, error_text.c_str(), "Error", MB_ICONERROR | MB_OK); +#else + log("Error :"); + log(error_text); +#endif + exit(1); +} void init_log() { - logfile = fopen(LOG_FILE, "w"); + logfile = fopen("tmw.log", "w"); if (!logfile) { printf("Warning: error while opening log file.\n"); } @@ -27,6 +27,45 @@ #include <stdarg.h> #include <time.h> #include <string> +#include <iostream> +#include <fstream> + +/** + * The Log Class : Useful to write debug or info messages + */ +class Logger +{ +public: + +/** + * Constructor : + * Initializes log file by opening it for writing. + */ +Logger(std::string logFilename); + +/** + * Destructor + */ +~Logger(); + +/** + * Enters a message in the log. The message will be timestamped. + */ +void log(std::string log_text); +void log(const char *log_text, ...); + +/** + * Log an error and quit. The error will pop-up in Windows and will be printed + * to standard error everywhere else. + */ +void error(const std::string &error_text); + +private: + +std::ofstream logFile; + +}; + /** * Initializes log file by opening it for writing. |