00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _TMWSERV_LOGGER_H_
00022 #define _TMWSERV_LOGGER_H_
00023
00024 #include <iosfwd>
00025 #include <sstream>
00026
00027 namespace utils
00028 {
00029
00072 class Logger
00073 {
00074 public:
00075 enum Level
00076 {
00077 FATAL = 0,
00078 ERROR,
00079 WARN,
00080 INFO,
00081 DEBUG
00082 };
00083
00094 static void setLogFile(const std::string &logFile);
00095
00102 static void setTimestamp(bool flag = true)
00103 { mHasTimestamp = flag; }
00104
00111 static void setTeeMode(bool flag = true)
00112 { mTeeMode = flag; }
00113
00119 static void setVerbosity(Level verbosity)
00120 { mVerbosity = verbosity; }
00121
00132 static void output(const std::string &msg, Level atVerbosity);
00133
00134 static Level mVerbosity;
00135 private:
00136 static bool mHasTimestamp;
00137 static bool mTeeMode;
00148 static void output(std::ostream &os, const std::string &msg,
00149 const char *prefix);
00150 };
00151
00152
00153 }
00154
00155
00156
00157 #define LOG(level, msg) \
00158 do if (::utils::Logger::mVerbosity >= ::utils::Logger::level) { \
00159 std::ostringstream os; \
00160 os << msg; \
00161 ::utils::Logger::output(os.str(), ::utils::Logger::level); \
00162 } while (0)
00163
00164 #define LOG_DEBUG(msg) LOG(DEBUG, msg)
00165 #define LOG_INFO(msg) LOG(INFO, msg)
00166 #define LOG_WARN(msg) LOG(WARN, msg)
00167 #define LOG_ERROR(msg) LOG(ERROR, msg)
00168 #define LOG_FATAL(msg) LOG(FATAL, msg)
00169
00170 #endif // _TMWSERV_LOGGER_H_