00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00023
00024 #ifndef BTK_IO_LOGGER_HPP
00025 #define BTK_IO_LOGGER_HPP
00026
00027 #include <string>
00028 #include <stack>
00029
00030 #include <boost/shared_ptr.hpp>
00031
00032 #include <btk/core/io/logger_level.hpp>
00033
00034 namespace BTK {
00035 namespace IO {
00036 namespace LOGGING {
00037
00040 struct LoggerInterface
00041 {
00042 virtual ~LoggerInterface() {}
00043
00047 virtual void log(std::string const & msg,
00048 LoggerLevel msg_level = EVERYTHING) const = 0;
00049
00053 virtual void error(std::string const & msg) const = 0;
00054 };
00055
00056 class SimpleLogger : public LoggerInterface
00057 {
00058 public:
00059 virtual void log(std::string const & msg,
00060 LoggerLevel msg_level = EVERYTHING) const;
00061
00062 virtual void error(std::string const & msg) const;
00063 };
00064
00077 class Logger
00078 {
00079 public:
00080 typedef boost::shared_ptr<LoggerInterface> logger_ptr;
00081
00082 virtual ~Logger() {}
00083
00085 static LoggerInterface const & instance();
00086
00089 static void push_logger(logger_ptr p) { _loggers.push(p); }
00090
00094 static void pop_logger()
00095 {
00096 if (!_loggers.empty()) _loggers.pop();
00097 }
00098
00099 protected:
00100 Logger() {}
00101
00102 private:
00103
00104 Logger(Logger const &);
00105 Logger & operator=(Logger const &);
00106
00107 static std::stack<logger_ptr> _loggers;
00108 };
00109
00110 }
00111 }
00112 }
00113
00114 #endif // BTK_LOGGER_H