8 #ifndef __dynamic_graph_logger_H__ 
    9 #define __dynamic_graph_logger_H__ 
   16 #if defined(logger_EXPORTS) 
   17 #define LOGGER_EXPORT __declspec(dllexport) 
   19 #define LOGGER_EXPORT __declspec(dllimport) 
   30   MSG_TYPE_TYPE_BITS = 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3,  
 
   31   MSG_TYPE_STREAM_BIT = 1 << 4,                            
 
   33   MSG_TYPE_DEBUG = 1 << 3,                                           
 
   34   MSG_TYPE_INFO = 1 << 2,                                            
 
   35   MSG_TYPE_WARNING = 1 << 1,                                         
 
   36   MSG_TYPE_ERROR = 1 << 0,                                           
 
   37   MSG_TYPE_DEBUG_STREAM = MSG_TYPE_DEBUG | MSG_TYPE_STREAM_BIT,      
 
   38   MSG_TYPE_INFO_STREAM = MSG_TYPE_INFO | MSG_TYPE_STREAM_BIT,        
 
   39   MSG_TYPE_WARNING_STREAM = MSG_TYPE_WARNING | MSG_TYPE_STREAM_BIT,  
 
   40   MSG_TYPE_ERROR_STREAM = MSG_TYPE_ERROR | MSG_TYPE_STREAM_BIT       
 
   50 #include <dynamic-graph/linear-algebra.h> 
   51 #include <dynamic-graph/real-time-logger-def.h> 
   53 #include <boost/assign.hpp> 
   54 #include <boost/preprocessor/stringize.hpp> 
   55 #include <dynamic-graph/deprecated.hh> 
   63 #define LOGGER_VERBOSITY_ALL 
   65 #define SEND_MSG(msg, type) \ 
   66   sendMsg(msg, type, __FILE__ ":" BOOST_PP_STRINGIZE(__LINE__))
 
   68 #define SEND_DEBUG_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_DEBUG_STREAM) 
   69 #define SEND_INFO_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_INFO_STREAM) 
   70 #define SEND_WARNING_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_WARNING_STREAM) 
   71 #define SEND_ERROR_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_ERROR_STREAM) 
   73 #define _DYNAMIC_GRAPH_ENTITY_MSG(entity, type) \ 
   74   (entity).logger().stream(type, __FILE__ BOOST_PP_STRINGIZE(__LINE__)) 
   76 #define DYNAMIC_GRAPH_ENTITY_DEBUG(entity) \ 
   77   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_DEBUG) 
   78 #define DYNAMIC_GRAPH_ENTITY_INFO(entity) \ 
   79   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_INFO) 
   80 #define DYNAMIC_GRAPH_ENTITY_WARNING(entity) \ 
   81   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_WARNING) 
   82 #define DYNAMIC_GRAPH_ENTITY_ERROR(entity) \ 
   83   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_ERROR) 
   85 #define DYNAMIC_GRAPH_ENTITY_DEBUG_STREAM(entity) \ 
   86   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_DEBUG_STREAM) 
   87 #define DYNAMIC_GRAPH_ENTITY_INFO_STREAM(entity) \ 
   88   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_INFO_STREAM) 
   89 #define DYNAMIC_GRAPH_ENTITY_WARNING_STREAM(entity) \ 
   90   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_WARNING_STREAM) 
   91 #define DYNAMIC_GRAPH_ENTITY_ERROR_STREAM(entity) \ 
   92   _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_ERROR_STREAM) 
   95 std::string toString(
const T &v, 
const int precision = 3,
 
   96                      const int width = -1) {
 
   98   if (width > precision)
 
   99     ss << std::fixed << std::setw(width) << std::setprecision(precision) << v;
 
  101     ss << std::fixed << std::setprecision(precision) << v;
 
  105 template <
typename T>
 
  106 std::string toString(
const std::vector<T> &v, 
const int precision = 3,
 
  107                      const int width = -1, 
const std::string separator = 
", ") {
 
  108   std::stringstream ss;
 
  109   if (width > precision) {
 
  110     for (
unsigned int i = 0; i < v.size() - 1; i++)
 
  111       ss << std::fixed << std::setw(width) << std::setprecision(precision)
 
  112          << v[i] << separator;
 
  113     ss << std::fixed << std::setw(width) << std::setprecision(precision)
 
  116     for (
unsigned int i = 0; i < v.size() - 1; i++)
 
  117       ss << std::fixed << std::setprecision(precision) << v[i] << separator;
 
  118     ss << std::fixed << std::setprecision(precision) << v[v.size() - 1];
 
  124 template <
typename T>
 
  125 std::string toString(
const Eigen::MatrixBase<T> &v, 
const int precision = 3,
 
  126                      const int width = -1, 
const std::string separator = 
", ") {
 
  127   std::stringstream ss;
 
  128   if (width > precision) {
 
  129     for (
unsigned int i = 0; i < v.size() - 1; i++)
 
  130       ss << std::fixed << std::setw(width) << std::setprecision(precision)
 
  131          << v[i] << separator;
 
  132     ss << std::fixed << std::setw(width) << std::setprecision(precision)
 
  135     for (
unsigned int i = 0; i < v.size() - 1; i++)
 
  136       ss << std::fixed << std::setprecision(precision) << v[i] << separator;
 
  137     ss << std::setprecision(precision) << v[v.size() - 1];
 
  143 enum LoggerVerbosity {
 
  144   VERBOSITY_ALL = MSG_TYPE_DEBUG,
 
  145   VERBOSITY_INFO_WARNING_ERROR = MSG_TYPE_INFO,
 
  146   VERBOSITY_WARNING_ERROR = MSG_TYPE_WARNING,
 
  147   VERBOSITY_ERROR = MSG_TYPE_ERROR,
 
  189   Logger(
double timeSample = 0.001, 
double streamPrintPeriod = 1.0);
 
  201     return ::dynamicgraph::RealTimeLogger::instance().front();
 
  212     RealTimeLogger &rtlogger = ::dynamicgraph::RealTimeLogger::instance();
 
  222   [[deprecated(
"use stream(type, lineId) << msg")]] 
void sendMsg(
 
  223       std::string msg, 
MsgType type, 
const std::string &lineId = 
"");
 
  230   [[deprecated(
"use stream(type, lineId) << msg")]] 
void sendMsg(
 
  231       std::string msg, 
MsgType type, 
const std::string &file, 
int line);
 
  254   LoggerVerbosity m_lv;  
 
  266   inline bool isStreamMsg(
MsgType m) { 
return (m & MSG_TYPE_STREAM_BIT); }
 
  274     if ((m & MSG_TYPE_TYPE_BITS) > m_lv) 
return false;
 
Class for logging messages.
 
double m_printCountdown
specify the time period of the stream prints
 
void sendMsg(std::string msg, MsgType type, const std::string &lineId="")
 
StreamCounterMap_t m_stream_msg_counters
 
bool checkStreamPeriod(const std::string &lineId)
 
double getStreamPrintPeriod()
 
bool setTimeSample(double t)
 
void setVerbosity(LoggerVerbosity lv)
 
Logger(double timeSample=0.001, double streamPrintPeriod=1.0)
 
bool setStreamPrintPeriod(double s)
 
LoggerVerbosity getVerbosity()
 
bool acceptMsg(MsgType m, const std::string &lineId)
 
std::map< std::string, double > StreamCounterMap_t
every time this is < 0 (i.e. every _streamPrintPeriod sec) print stuff
 
double m_timeSample
verbosity of the logger
 
void sendMsg(std::string msg, MsgType type, const std::string &file, int line)
 
RTLoggerStream stream(MsgType type, const std::string &lineId="")
 
double m_streamPrintPeriod
specify the period of call of the countdown method
 
Main class of the real-time logger.
 
RTLoggerStream emptyStream()
Return an empty stream object.