00001
00002
00003
00004
00005 #ifndef _LOGGER_H_
00006 #define _LOGGER_H_
00007
00008 #include <ctime>
00009 #include <fstream>
00010 #include <iomanip>
00011 #include <iostream>
00012 #include <string>
00013 #include <vector>
00014
00015 namespace Limiro
00016 {
00017
00018 class Logger
00019 {
00020 public:
00021 enum Event
00022 {
00023 EvtInvalid = 0,
00024 EvtProgStart = 0x10,
00025 EvtProgEnd = 0x11,
00026 EvtExerciseStart = 0x20,
00027 EvtExerciseEnd = 0x21,
00028
00029
00030
00031
00032 EvtTestStart = 0x40,
00033 EvtTestEnd = 0x41,
00034 };
00035
00036 void start(const std::string& logFile);
00037 void end();
00038
00039 static Logger *getSingleton();
00040
00041 void log(Event evt, const std::vector<std::string>& data=std::vector<std::string>());
00042 void log(Event evt, const std::string& s1, const std::string& s2="", const std::string& s3="", const std::string& s4="", const std::string& s5="");
00043
00044 private:
00045 Logger();
00046 void writeStrSafe(const char *str, int len);
00047
00048 static Logger *m_singleton;
00049
00050 std::ostream *m_out;
00051 };
00052
00053 inline void log(Logger::Event evt, const std::string& s1, const std::string& s2="", const std::string& s3="", const std::string& s4="", const std::string& s5="")
00054 {
00055 Logger::getSingleton()->log(evt, s1, s2, s3, s4, s5);
00056 }
00057
00058 inline void log(Logger::Event evt, const std::vector<std::string>& data=std::vector<std::string>())
00059 {
00060 Logger::getSingleton()->log(evt, data);
00061 }
00062
00063 }
00064
00065 #endif // _LOGGER_H_