00001 #ifndef DEF_LOG_ACTIVE_123 00002 #define DEF_LOG_ACTIVE_123 00003 00004 #include <iostream> 00005 #include <fstream> 00006 #include <stack> 00007 #include <time.h> 00008 00010 00011 #ifdef LOG_ACTIVE 00012 00014 #define TO_STR(x) #x 00015 #define LOG_STR(x) << TO_STR([) <<__LINE__ << TO_STR(:) << __FILE__ << TO_STR(] :) << x << std::endl; 00016 00018 #define LOG(x) if(Logging::default_level <= LOG_OUTPUT_LEVEL) Logging::log() LOG_STR(x); 00020 #define LOG_AT(lvl, x) if(lvl <= LOG_OUTPUT_LEVEL) Logging::log() LOG_STR(x); 00022 #define TRACE(x) Logging::log() << TO_STR(x) << std::endl; x; 00024 #define EXP(x) Logging::log() << TO_STR(x) << " = " << x << std::endl; 00025 00028 #define SET_LEVEL(x) Logging::default_level = x; 00030 #define OPEN_LOG(x) Logging::set_log_stream(x, false); 00032 #define OPEN_LOG_APPEND(x) Logging::set_log_stream(x, true); 00034 #define SET_LOG_STDERR Logging::set_log_stream(""); 00036 #define CLOSE_LOG Logging::close_log_stream(); 00037 00038 00039 00040 #else 00042 00043 #define LOG_STR(x) 00044 #define LOG(x) 00045 #define LOG_AT(lvl, x) 00046 #define SET_LEVEL(x) 00047 #define SET_LOG(x) 00048 #define SET_LOG_APPEND(x) 00049 #define SET_LOG_STDERR 00050 #define TRACE(x) 00051 #define EXP(x) 00052 #define CLOSE_LOG 00053 #define OPEN_LOG(x) 00054 #define OPEN_LOG_APPEND(x) 00055 00056 #endif 00057 00058 #define CLOCKS_PER_MS (CLOCKS_PER_SEC * 1000) 00059 00063 class Logging { 00064 public: 00068 static unsigned int default_level; 00069 00075 static void set_log_stream(const std::string& str, bool append = false); 00076 00081 static void close_log_stream(); 00082 00087 static std::ostream& log(); 00088 00090 static std::stack<std::ostream*> streams; 00091 00092 00093 }; 00094 00095 00098 class TimeLogging : Logging { 00099 00100 private: 00102 clock_t startup; 00104 clock_t last_event; 00105 00106 public: 00107 00108 TimeLogging(); 00109 00117 void log_event(const std::string& s_event); 00118 00119 00120 00121 }; 00122 00123 00124 00125 00126 00127 00128 00129 00130 #endif