OpenRTM-aist  1.2.1
SystemLogger.h
Go to the documentation of this file.
1 // -*- C++ -*-
19 #ifndef RTC_SYSTEMLOGGER_H
20 #define RTC_SYSTEMLOGGER_H
21 
22 #include <rtm/config_rtc.h>
23 
24 // COIL
25 #include <coil/Time.h>
26 #include <coil/ClockManager.h>
27 #include <coil/Logger.h>
28 #include <coil/Mutex.h>
29 #include <coil/Guard.h>
30 #include <coil/stringutil.h>
31 
32 namespace RTC
33 {
36 
99  class Logger
100  : public coil::LogStream
101  {
102  public:
103  enum
104  { // No: Write out messages include the following.
105  RTL_SILENT, // 0: ()
106  RTL_FATAL, // 1: (FATAL)
107  RTL_ERROR, // 2: (FATAL, ERROR)
108  RTL_WARN, // 3: (FATAL, ERROR, WARN)
109  RTL_INFO, // 4: (FATAL, ERROR, WARN, INFO)
110  RTL_DEBUG, // 5: (FATAL, ERROR, WARN, INFO, DEBUG)
111  RTL_TRACE, // 6: (FATAL, ERROR, WARN, INFO, DEBUG, TRACE)
112  RTL_VERBOSE, // 7: (FATAL, ERROR, WARN, INFO, DEBUG, TRACE, VERBOSE)
113  RTL_PARANOID // 8: (FATAL, ERROR, WARN, INFO, DEBUG, TRACE, VERBOSE, PARA)
114  };
115 
134  Logger(const char* name = "");
153  Logger(LogStreamBuf* streambuf);
165  virtual ~Logger(void);
166 
182  bool setLevel(const char* level);
183 
259  void setDateFormat(const char* format);
260 
299  void setClockType(std::string clocktype);
300 
320  void setName(const char* name);
338  void enableEscapeSequence();
356  void disableEscapeSequence();
357 
358  protected:
377  virtual void header(int level);
378 
394  std::string getDate(void);
395 
413  int strToLevel(const char* level);
414 
415  private:
416  std::string m_name;
417  std::string m_dateFormat;
418  coil::IClock* m_clock;
419  static const char* m_levelString[];
420  int m_msEnable;
421  int m_usEnable;
422  bool m_esEnable;
423  };
424 
425 
426 #ifndef NO_LOGGING
427 
442 #define RTC_LOG(LV, fmt) \
443  if (rtclog.isValid(LV)) \
444  { \
445  std::string str = ::coil::sprintf fmt; \
446  rtclog.lock(); \
447  rtclog.level(LV) << str << std::endl; \
448  rtclog.unlock(); \
449  }
450 
451 #define RTC_LOG_STR(LV, str) \
452  if (rtclog.isValid(LV)) \
453  { \
454  rtclog.lock(); \
455  rtclog.level(LV) << str << std::endl; \
456  rtclog.unlock(); \
457  }
458 
478 #define RTC_FATAL(fmt) RTC_LOG(::RTC::Logger::RTL_FATAL, fmt)
479 #define RTC_FATAL_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_FATAL, str)
480 
500 #define RTC_ERROR(fmt) RTC_LOG(::RTC::Logger::RTL_ERROR, fmt)
501 #define RTC_ERROR_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_ERROR, str)
502 
522 #define RTC_WARN(fmt) RTC_LOG(::RTC::Logger::RTL_WARN, fmt)
523 #define RTC_WARN_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_WARN, str)
524 
544 #define RTC_INFO(fmt) RTC_LOG(::RTC::Logger::RTL_INFO, fmt)
545 #define RTC_INFO_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_INFO, str)
546 
566 #define RTC_DEBUG(fmt) RTC_LOG(::RTC::Logger::RTL_DEBUG, fmt)
567 #define RTC_DEBUG_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_DEBUG, str)
568 
588 #define RTC_TRACE(fmt) RTC_LOG(::RTC::Logger::RTL_TRACE, fmt)
589 #define RTC_TRACE_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_TRACE, str)
590 
591 
611 #define RTC_VERBOSE(fmt) RTC_LOG(::RTC::Logger::RTL_VERBOSE, fmt)
612 #define RTC_VERBOSE_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_VERBOSE, str)
613 
633 #define RTC_PARANOID(fmt) RTC_LOG(::RTC::Logger::RTL_PARANOID, fmt)
634 #define RTC_PARANOID_STR(str) RTC_LOG_STR(::RTC::Logger::RTL_PARANOID, str)
635 
636 #else
637 #define RTC_FATAL(fmt)
638 #define RTC_FATAL_STR(str)
639 #define RTC_ERROR(fmt)
640 #define RTC_ERROR_STR(str)
641 #define RTC_WARN(fmt)
642 #define RTC_WARN_STR(str)
643 #define RTC_INFO(fmt)
644 #define RTC_INFO_STR(str)
645 #define RTC_DEBUG(fmt)
646 #define RTC_DEBUG_STR(str)
647 #define RTC_TRACE(fmt)
648 #define RTC_TRACE_STR(str)
649 #define RTC_VERBOSE(fmt)
650 #define RTC_VERBOSE_STR(str)
651 #define RTC_PARANOID(fmt)
652 #define RTC_PARANOID_STR(str)
653 #endif
654 
655 }; // namespace RTC
656 
657 #endif // RTC_SYSTEMLOGGER_H
virtual ~Logger(void)
Virtual destructor.
bool setLevel(const char *level)
Set log level by string.
An interface to set and get time.
Definition: ClockManager.h:52
RT-Component.
Global clock management class.
::coil::LogStreamBuffer LogStreamBuf
Definition: SystemLogger.h:34
void setClockType(std::string clocktype)
Specifying clock type to be used for logging.
::coil::LogStream LogStream
Definition: SystemLogger.h:35
Definition: SystemLogger.h:113
Definition: SystemLogger.h:110
Definition: SystemLogger.h:109
void disableEscapeSequence()
Logger(const char *name="")
Constructor.
Definition: SystemLogger.h:105
Definition: SystemLogger.h:106
void setDateFormat(const char *format)
Set date/time format for adding the header.
log_stream template class
Definition: Logger.h:540
Guard template class.
Definition: SystemLogger.h:108
Definition: SystemLogger.h:112
virtual void header(int level)
Message prefix appender function.
Logger class.
Definition: SystemLogger.h:99
void enableEscapeSequence()
log_streambuf< char > LogStreamBuffer
Definition: Logger.h:932
std::string getDate(void)
Get the current formatted date/time string Get the current datetime described by specified format...
ostream_type & level(int level)
Acquire log stream.
Definition: Logger.h:732
log_streambuf and log_stream class
Definition: SystemLogger.h:111
Definition: SystemLogger.h:107
void setName(const char *name)
Set suffix of date/time string of header.
int strToLevel(const char *level)
Set the log level Set the log level corresponding to the given string.