ICP  1
IsisBase.h
Go to the documentation of this file.
1 #ifndef ISIS_BASE
2 #define ISIS_BASE
3 
4 #ifndef __func__
5 #define __func__ __FUNCTION__
6 #endif /* __func */
7 
8 namespace ISIS
9 {
10  class Base
11  {
12  protected:
13  Base(const std::string& logger_name = "UNKNOWN") : m_logger(NULL), m_logstr(NULL) { setLoggerName(logger_name); }
14  Poco::Logger* m_logger;
15  Poco::LogStream* m_logstr;
16  Poco::Mutex m_logger_lock; // to protect m_logstr when multiple threads are running in the same class instance
17  void setLoggerName(const std::string& logger_name)
18  {
19  m_logger = &Poco::Logger::get(logger_name);
20  if (m_logstr != NULL)
21  {
22  delete m_logstr;
23  }
24  m_logstr = new Poco::LogStream(*m_logger);
25  }
26  virtual ~Base() { delete m_logstr; }
27  virtual std::string loggingPrefix() const { return ""; }
28  void setThisLoggerLevel(int level) { m_logger->setLevel(level); }
29  static void setAllLoggerLevel(int level) { Poco::Logger::setLevel(Poco::Logger::ROOT, level); }
30 
31  private:
32  Base(const Base&) : m_logger(NULL), m_logstr(NULL) { }
33  Base& operator=(const Base&) { return *this; }
34  };
35 }
36 
37 // Logger
38 #define LOG_TRACE(__arg) \
39  poco_trace(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
40 
41 #define LOG_DEBUG(__arg) \
42  poco_debug(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
43 
44 #define LOG_INFORMATION(__arg) \
45  poco_information(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
46 
47 #define LOG_NOTICE(__arg) \
48  poco_notice(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
49 
50 #define LOG_WARNING(__arg) \
51  poco_warning(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
52 
53 #define LOG_ERROR(__arg) \
54  poco_error(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
55 
56 #define LOG_CRITICAL(__arg) \
57  poco_critical(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
58 
59 #define LOG_FATAL(__arg) \
60  poco_fatal(*m_logger, std::string("(") + __func__ + ") " + loggingPrefix() + __arg);
61 
62 
63 // LogStr
64 #define LOGSTR_TRACE(__arg) \
65  if (m_logger->trace()) \
66  { \
67  Poco::Mutex::ScopedLock lock(m_logger_lock); \
68  m_logstr->trace() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
69  }
70 
71 #define LOGSTR_DEBUG(__arg) \
72  if (m_logger->debug()) \
73  { \
74  Poco::Mutex::ScopedLock lock(m_logger_lock); \
75  m_logstr->debug() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
76  }
77 
78 #define LOGSTR_INFORMATION(__arg) \
79  if (m_logger->information()) \
80  { \
81  Poco::Mutex::ScopedLock lock(m_logger_lock); \
82  m_logstr->information() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
83  }
84 
85 #define LOGSTR_NOTICE(__arg) \
86  if (m_logger->notice()) \
87  { \
88  Poco::Mutex::ScopedLock lock(m_logger_lock); \
89  m_logstr->notice() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
90  }
91 
92 #define LOGSTR_WARNING(__arg) \
93  if (m_logger->warning()) \
94  { \
95  Poco::Mutex::ScopedLock lock(m_logger_lock); \
96  m_logstr->warning() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
97  }
98 
99 #define LOGSTR_ERROR(__arg) \
100  if (m_logger->error()) \
101  { \
102  Poco::Mutex::ScopedLock lock(m_logger_lock); \
103  m_logstr->error() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
104  }
105 
106 #define LOGSTR_CRITICAL(__arg) \
107  if (m_logger->critical()) \
108  { \
109  Poco::Mutex::ScopedLock lock(m_logger_lock); \
110  m_logstr->critical() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
111  }
112 
113 #define LOGSTR_FATAL(__arg) \
114  if (m_logger->fatal()) \
115  { \
116  Poco::Mutex::ScopedLock lock(m_logger_lock); \
117  m_logstr->fatal() << "(" << __func__ << ") " << loggingPrefix() << __arg << std::endl; \
118  }
119 
120 #endif /* ISIS_BASE */
virtual std::string loggingPrefix() const
Definition: IsisBase.h:27
Poco::Mutex m_logger_lock
Definition: IsisBase.h:16
Base & operator=(const Base &)
Definition: IsisBase.h:33
Poco::Logger * m_logger
Definition: IsisBase.h:14
void setThisLoggerLevel(int level)
Definition: IsisBase.h:28
Base(const Base &)
Definition: IsisBase.h:32
static void setAllLoggerLevel(int level)
Definition: IsisBase.h:29
Base(const std::string &logger_name="UNKNOWN")
Definition: IsisBase.h:13
Poco::LogStream * m_logstr
Definition: IsisBase.h:15
void setLoggerName(const std::string &logger_name)
Definition: IsisBase.h:17
virtual ~Base()
Definition: IsisBase.h:26