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