RMOL Logo Get Revenue Management Optimisation Library at SourceForge.net. Fast, secure and Free Open Source software downloads

Logger.hpp

Go to the documentation of this file.
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
SourceForge Logo

Generated on Sat Aug 13 2011 11:59:20 for RMOL by Doxygen 1.7.1