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 <iostream> 00011 #include <sstream> 00012 #include <string> 00013 // RMOL 00014 #include <rmol/RMOL_Types.hpp> 00015 00016 // /////////////// LOG MACROS ///////////////// 00017 #define RMOL_LOG_CORE(iLevel, iToBeLogged) \ 00018 { std::ostringstream ostr; ostr << iToBeLogged; \ 00019 RMOL::Logger::instance().log (iLevel, __LINE__, __FILE__, ostr.str()); } 00020 00021 #define RMOL_LOG_CRITICAL(iToBeLogged) \ 00022 RMOL_LOG_CORE (RMOL::LOG::CRITICAL, iToBeLogged) 00023 00024 #define RMOL_LOG_ERROR(iToBeLogged) \ 00025 RMOL_LOG_CORE (RMOL::LOG::ERROR, iToBeLogged) 00026 00027 #define RMOL_LOG_NOTIFICATION(iToBeLogged) \ 00028 RMOL_LOG_CORE (RMOL::LOG::NOTIFICATION, iToBeLogged) 00029 00030 #define RMOL_LOG_WARNING(iToBeLogged) \ 00031 RMOL_LOG_CORE (RMOL::LOG::WARNING, iToBeLogged) 00032 00033 #define RMOL_LOG_DEBUG(iToBeLogged) \ 00034 RMOL_LOG_CORE (RMOL::LOG::DEBUG, iToBeLogged) 00035 00036 #define RMOL_LOG_VERBOSE(iToBeLogged) \ 00037 RMOL_LOG_CORE (RMOL::LOG::VERBOSE, iToBeLogged) 00038 // /////////// (END OF) LOG MACROS ///////////// 00039 00040 00041 namespace RMOL { 00042 00046 class Logger { 00047 // Friend classes 00048 friend class FacSupervisor; 00049 public: 00050 00052 template <typename T> 00053 void log (const LOG::EN_LogLevel iLevel, const int iLineNumber, 00054 const std::string& iFileName, const T& iToBeLogged) { 00055 if (iLevel <= _level) { 00056 assert (_logStream != NULL); 00057 *_logStream << iFileName << ":" << iLineNumber 00058 << ": " << iToBeLogged << std::endl; 00059 } 00060 } 00061 00063 LOG::EN_LogLevel getLogLevel(); 00064 00066 std::ostream& getLogStream(); 00067 00069 void setLogParameters (const LOG::EN_LogLevel iLogLevel, 00070 std::ostream& ioLogStream); 00071 00073 static Logger& instance(); 00074 00075 private: 00078 Logger (); 00079 Logger (const Logger&); 00080 Logger (const LOG::EN_LogLevel iLevel, std::ostream& ioLogStream); 00082 ~Logger (); 00083 00084 private: 00086 LOG::EN_LogLevel _level; 00087 00089 std::ostream* _logStream; 00090 00092 static Logger* _instance; 00093 }; 00094 00095 } 00096 #endif // __RMOL_SVC_LOGGER_HPP
Generated on Fri Sep 11 06:32:00 2009 for RMOL by Doxygen 1.5.8