#ifndef LOGGER_H #define LOGGER_H #include "networkclock_types.h" // for 'Network_Clock_Tick' #include // for 'std::ostream' and 'std::ofstream' // Constants defining the six different importance levels of the log messages #define LOG_DEBUG 0 #define LOG_INFO 1 #define LOG_COM 2 #define LOG_WARNING 3 #define LOG_ERROR 4 #define LOG_FATAL 5 #define LOG_NONE 6 #define logFunction() clog << logger(LOG_DEBUG) << __PRETTY_FUNCTION__ << endl #define logTest() clog << endl << "---" << endl << __PRETTY_FUNCTION__ << endl class Logger { public: // Constructors: /** * Empty Constructor * Logs to cout, log level LOG_DEBUG */ Logger ( ); /** * Constructor * Logs to cout, log level specified */ Logger ( int log_level ); /** * Constructor * Logs to a specified stream, log level specified */ Logger ( std::ofstream & log_file, int log_level ); /** * Empty Destructor */ virtual ~Logger ( ); /** * Operator to set the level of a message */ Logger & operator() ( int msg_level ); /** * Operator to pass the message to the stream */ friend std::ostream & operator<< ( std::ostream & os, const Logger & logger ); /** * Function to set the stream */ void setLogFile ( std::ofstream & log_file ); /** * Functions to get and set the log level */ int getLogLevel ( ) const; void setLogLevel ( int log_level ); /** * Functions to get and set the msg level */ int getMsgLevel ( ) const; void setMsgLevel ( int msg_level ); /** * @return Network_Clock_Tick */ Network_Clock_Tick getCurrentTickValue ( ) const; /** * @return bool * @param current_tick_value */ bool updateTickValue ( const Network_Clock_Tick current_tick_value ); private: // Current log level int mLogLevel; // Level of message (as set by operator) int mMsgLevel; Network_Clock_Tick mCurrentTickValue; }; extern Logger logger; #endif // LOGGER_H