free to use, redistribute, modify Et cetera
Header File
#ifndef LOG_H#define LOG_H#include <string>#include <fstream>#include <ctime>enum LogLevel {Fatal = 0, Error, Warning, Information, Debug};class LOG {public: LOG(void); void disable(); void enable(); void setloglevel(LogLevel Severity); void setmaxloglevel(LogLevel Severity); void out(char * Message); void out(char * Message, LogLevel Severity); void out(std::string Message); void out(std::string Message, LogLevel Severity);private: LogLevel CurrentLogLevel; char * filename; bool isEnabled; LogLevel MaxLogLevel;};#endif /* LOG_H */
Source Code
#include "Log.h"LOG::LOG(void) { CurrentLogLevel = Debug; MaxLogLevel = Debug; filename = "Log.txt"; isEnabled = true;}void LOG::disable() { isEnabled = false;}void LOG::enable() { isEnabled = true;}void LOG::setloglevel(LogLevel Severity){ CurrentLogLevel = Severity;}void LOG::setmaxloglevel(LogLevel Severity) { MaxLogLevel = Severity;}/*Summary: Writes "Message" to a file using the DefaultLogLevel//*/void LOG::out(char * Message) { if( (isEnabled) && (CurrentLogLevel >= MaxLogLevel) ) { std::fstream File; size_t writebufferlength; File.open(filename, std::ios::out | std::ios::app); if ( File.is_open() ) { switch(CurrentLogLevel) { case Debug: { File.write("Debug\n",6); break; } case Information: { File.write("Information\n",12); break; } case Warning: { File.write("Warning!\n",9); break; } case Error: { File.write("!!ERROR!!\n",10); break; } case Fatal: { File.write("!!!FATAL ERROR!!!\n",27); File.write("This is the Line You Are Looking for LOL!\n", 42); break; } } time_t ltime; struct tm *Tm; ltime=time(NULL); Tm=localtime(<ime); char * timestamp = asctime(Tm); writebufferlength = strlen(timestamp); File.write(timestamp, writebufferlength); writebufferlength = strlen(Message); File.write(Message, writebufferlength); File.write("\n\n",2); } File.flush(); File.close(); }}/*Summary: Writes "Message" to a file using the specified LogLevel//*/void LOG::out(char * Message, LogLevel Severity) { if( (isEnabled) && (Severity <= MaxLogLevel) ) { std::fstream File; size_t writebufferlength; File.open(filename, std::ios::out | std::ios::app); if ( File.is_open() ) { switch(Severity) { case Debug: { File.write("Debug\n",6); break; } case Information: { File.write("Information\n",12); break; } case Warning: { File.write("Warning!\n",9); break; } case Error: { File.write("!!ERROR!!\n",10); break; } case Fatal: { File.write("!!!FATAL ERROR!!!\n",27); File.write("This is the Line You Are Looking for LOL!\n", 42); break; } } time_t ltime; struct tm *Tm; ltime=time(NULL); Tm=localtime(<ime); char * timestamp = asctime(Tm); writebufferlength = strlen(timestamp); File.write(timestamp, writebufferlength); writebufferlength = strlen(Message); File.write(Message, writebufferlength); File.write("\n\n",2); } File.flush(); File.close(); }}void LOG::out(std::string Message) { char *sz; sz = new char[Message.length() + 1]; strcpy(sz, Message.c_str()); // now work with sz, which is a copy of s out(sz); // clean up delete [] sz;}void LOG::out(std::string Message, LogLevel Severity) { char *sz; sz = new char[Message.length() + 1]; strcpy(sz, Message.c_str()); // now work with sz, which is a copy of s out(sz, Severity); // clean up delete [] sz;}