00001 #ifndef __RMOL_SVC_LOGGER_HPP 00002 #define __RMOL_SVC_LOGGER_HPP 00003 00004 // ////////////////////////////////////////////////////////////////////// 00005 // Import section 00006 // ////////////////////////////////////////////////////////////////////// 00007 // C 00008 #include <assert.h> 00009 // STL 00010 #include <sstream> 00011 #include <string> 00012 // RMOL 00013 #include <rmol/RMOL_Types.hpp> 00014 00015 // /////////////// LOG MACROS ///////////////// 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 // /////////// (END OF) LOG MACROS ///////////// 00038 00039 00040 namespace RMOL { 00041 00045 class Logger { 00046 // Friend classes 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
Generated on Tue Sep 7 2010 18:30:39 for RMOL by Doxygen 1.7.1