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 <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
SourceForge Logo

Generated on Fri Sep 11 06:32:00 2009 for RMOL by Doxygen 1.5.8