Go to the documentation of this file.00001 #ifndef __RMOL_SVC_LOGGER_HPP
00002 #define __RMOL_SVC_LOGGER_HPP
00003
00004
00005
00006
00007
00008 #include <assert.h>
00009
00010 #include <sstream>
00011 #include <string>
00012
00013 #include <rmol/RMOL_Types.hpp>
00014
00015
00016 #define RMOL_LOG_CORE(iLevel, iToBeLogged) \
00017 { std::ostringstream ostr; ostr << iToBeLogged; \
00018 RMOL::Logger::instance().log (iLevel, __LINE__, __FILE__, ostr.str()); }
00019
00020 #define RMOL_LOG_CRITICAL(iToBeLogged) \
00021 RMOL_LOG_CORE (RMOL::LOG::CRITICAL, iToBeLogged)
00022
00023 #define RMOL_LOG_ERROR(iToBeLogged) \
00024 RMOL_LOG_CORE (RMOL::LOG::ERROR, iToBeLogged)
00025
00026 #define RMOL_LOG_NOTIFICATION(iToBeLogged) \
00027 RMOL_LOG_CORE (RMOL::LOG::NOTIFICATION, iToBeLogged)
00028
00029 #define RMOL_LOG_WARNING(iToBeLogged) \
00030 RMOL_LOG_CORE (RMOL::LOG::WARNING, iToBeLogged)
00031
00032 #define RMOL_LOG_DEBUG(iToBeLogged) \
00033 RMOL_LOG_CORE (RMOL::LOG::DEBUG, iToBeLogged)
00034
00035 #define RMOL_LOG_VERBOSE(iToBeLogged) \
00036 RMOL_LOG_CORE (RMOL::LOG::VERBOSE, iToBeLogged)
00037
00038
00039
00040 namespace RMOL {
00041
00045 class Logger {
00046
00047 friend class FacSupervisor;
00048 public:
00049
00051 template <typename T>
00052 void log (const LOG::EN_LogLevel iLevel, const int iLineNumber,
00053 const std::string& iFileName, const T& iToBeLogged) {
00054 if (iLevel <= _level) {
00055 assert (_logStream != NULL);
00056 *_logStream << iFileName << ":" << iLineNumber
00057 << ": " << iToBeLogged << std::endl;
00058 }
00059 }
00060
00062 LOG::EN_LogLevel getLogLevel();
00063
00065 std::ostream& getLogStream();
00066
00068 void setLogParameters (const LOG::EN_LogLevel iLogLevel,
00069 std::ostream& ioLogStream);
00070
00072 static Logger& instance();
00073
00074 private:
00077 Logger ();
00078 Logger (const Logger&);
00079 Logger (const LOG::EN_LogLevel iLevel, std::ostream& ioLogStream);
00081 ~Logger ();
00082
00083 private:
00085 LOG::EN_LogLevel _level;
00086
00088 std::ostream* _logStream;
00089
00091 static Logger* _instance;
00092 };
00093
00094 }
00095 #endif // __RMOL_SVC_LOGGER_HPP