00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "CEGUILogger.h"
00027 #include <ctime>
00028 #include <iomanip>
00029
00030
00031 namespace CEGUI
00032 {
00033
00034
00035
00036
00037 template<> Logger* Singleton<Logger>::ms_Singleton = NULL;
00038
00039
00040
00041
00042
00043 Logger::Logger(const String& filename, bool append ) :
00044 d_level(Standard),
00045 d_ostream(filename.c_str(), std::ios_base::out | (append ? std::ios_base::app : std::ios_base::trunc))
00046 {
00047
00048 d_ostream.width(2);
00049
00050
00051 logEvent((utf8*)"+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+");
00052 logEvent((utf8*)"+ Crazy Eddie's GUI System - Event log +");
00053 logEvent((utf8*)"+ (http://www.cegui.org.uk) +");
00054 logEvent((utf8*)"+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
00055 logEvent((utf8*)"CEGUI::Logger singleton created.");
00056 }
00057
00058
00059
00060
00061 Logger::~Logger(void)
00062 {
00063 if (d_ostream.is_open())
00064 {
00065 logEvent((utf8*)"CEGUI::Logger singleton destroyed.");
00066 d_ostream.close();
00067 }
00068
00069 }
00070
00071
00072
00073
00074 void Logger::logEvent(const String& message, LoggingLevel level )
00075 {
00076
00077 if (d_level >= level)
00078 {
00079 using namespace std;
00080
00081 time_t et;
00082 time(&et);
00083 tm* etm = gmtime(&et);
00084
00085 if (etm != NULL)
00086 {
00087
00088 d_ostream << setfill('0') << setw(2) << etm->tm_mday << '/' <<
00089 setfill('0') << setw(2) << 1 + etm->tm_mon << '/' <<
00090 setw(4) << (1900 + etm->tm_year) << ' ';
00091
00092
00093 d_ostream << setfill('0') << setw(2) << etm->tm_hour << ':' <<
00094 setfill('0') << setw(2) << etm->tm_min << ':' <<
00095 setfill('0') << setw(2) << etm->tm_sec << ' ';
00096
00097
00098 switch(level)
00099 {
00100 case Errors:
00101 d_ostream << "(Error)\t";
00102 break;
00103
00104 case Standard:
00105 d_ostream << "(InfL1)\t";
00106 break;
00107
00108 case Informative:
00109 d_ostream << "(InfL2)\t";
00110 break;
00111
00112 case Insane:
00113 d_ostream << "(InfL3)\t";
00114 break;
00115
00116 default:
00117 d_ostream << "(Unkwn)\t";
00118 break;
00119 }
00120
00121
00122 d_ostream << message << endl;
00123 }
00124
00125
00126 d_ostream.flush();
00127 }
00128 }
00129
00130
00131 Logger& Logger::getSingleton(void)
00132 {
00133 return Singleton<Logger>::getSingleton();
00134 }
00135
00136 }