00001 #ifndef Logger_h 00002 #define Logger_h 00003 00004 #include <string> 00005 #include <vector> 00006 #include <fstream> 00007 00008 class State; 00009 typedef boost::shared_ptr<State> StateP; 00010 00011 00015 #define ECF_LOG(state, level, msg) \ 00016 ( ((state)->getLogger()->getLogLevel() >= (level)) ? (state)->getLogger()->log((level), (msg)) : (void) 0 ) 00017 00018 00022 #define ECF_LOG_ERROR(state, msg) \ 00023 ( (state)->getLogger()->log(1, (msg)) ) 00024 00025 00032 class Logger 00033 { 00034 public: 00035 typedef struct { 00036 int logLevel; 00037 std::string message; 00038 } Log; 00039 00040 Logger(); 00041 ~Logger(); 00042 00046 void log(int logLevel, std::string message); 00047 00052 void saveTo(std::string fileName); 00053 00058 void saveTo(bool check = false); 00059 00060 void saveToX(std::string fileName); 00061 00062 void saveToX(); 00063 00064 void flushLog(); 00065 00070 void setLogFrequency(uint freq); 00071 00072 void registerParameters(StateP state); 00073 00077 bool initialize(StateP state); 00078 00079 bool operate(StateP); 00080 00081 void closeLog() 00082 { logFile_.close(); } 00083 00084 int getLogLevel() 00085 { return currentLevel_; } 00086 00087 protected: 00088 std::vector<Log> logs_; 00089 int currentLevel_; 00090 uint logFrequency_; 00091 std::string logFileName_; 00092 bool bFileDefined_; 00093 std::ofstream logFile_; 00094 StateP state_; 00095 }; 00096 typedef boost::shared_ptr<Logger> LoggerP; 00097 00098 #endif