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
54 #include <boost/assign.hpp> 55 #include <boost/preprocessor/stringize.hpp> 57 #include <dynamic-graph/deprecated.hh> 58 #include <dynamic-graph/linear-algebra.h> 59 #include <dynamic-graph/real-time-logger-def.h> 64 #define LOGGER_VERBOSITY_ALL 66 #define SEND_MSG(msg, type) \ 67 sendMsg(msg, type, __FILE__ ":" BOOST_PP_STRINGIZE(__LINE__)) 69 #define SEND_DEBUG_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_DEBUG_STREAM) 70 #define SEND_INFO_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_INFO_STREAM) 71 #define SEND_WARNING_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_WARNING_STREAM) 72 #define SEND_ERROR_STREAM_MSG(msg) SEND_MSG(msg, MSG_TYPE_ERROR_STREAM) 74 #define _DYNAMIC_GRAPH_ENTITY_MSG(entity, type) \ 75 (entity).logger().stream(type, __FILE__ BOOST_PP_STRINGIZE(__LINE__)) 77 #define DYNAMIC_GRAPH_ENTITY_DEBUG(entity) \ 78 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_DEBUG) 79 #define DYNAMIC_GRAPH_ENTITY_INFO(entity) \ 80 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_INFO) 81 #define DYNAMIC_GRAPH_ENTITY_WARNING(entity) \ 82 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_WARNING) 83 #define DYNAMIC_GRAPH_ENTITY_ERROR(entity) \ 84 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_ERROR) 86 #define DYNAMIC_GRAPH_ENTITY_DEBUG_STREAM(entity) \ 87 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_DEBUG_STREAM) 88 #define DYNAMIC_GRAPH_ENTITY_INFO_STREAM(entity) \ 89 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_INFO_STREAM) 90 #define DYNAMIC_GRAPH_ENTITY_WARNING_STREAM(entity) \ 91 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_WARNING_STREAM) 92 #define DYNAMIC_GRAPH_ENTITY_ERROR_STREAM(entity) \ 93 _DYNAMIC_GRAPH_ENTITY_MSG(entity, MSG_TYPE_ERROR_STREAM) 96 std::string toString(
const T &v,
const int precision = 3,
97 const int width = -1) {
99 if (width > precision)
100 ss << std::fixed << std::setw(width) << std::setprecision(precision) << v;
102 ss << std::fixed << std::setprecision(precision) << v;
106 template <
typename T>
107 std::string toString(
const std::vector<T> &v,
const int precision = 3,
108 const int width = -1,
const std::string separator =
", ") {
109 std::stringstream ss;
110 if (width > precision) {
111 for (
unsigned int i = 0; i < v.size() - 1; i++)
112 ss << std::fixed << std::setw(width) << std::setprecision(precision)
113 << v[i] << separator;
114 ss << std::fixed << std::setw(width) << std::setprecision(precision)
117 for (
unsigned int i = 0; i < v.size() - 1; i++)
118 ss << std::fixed << std::setprecision(precision) << v[i] << separator;
119 ss << std::fixed << std::setprecision(precision) << v[v.size() - 1];
125 template <
typename T>
126 std::string toString(
const Eigen::MatrixBase<T> &v,
const int precision = 3,
127 const int width = -1,
const std::string separator =
", ") {
128 std::stringstream ss;
129 if (width > precision) {
130 for (
unsigned int i = 0; i < v.size() - 1; i++)
131 ss << std::fixed << std::setw(width) << std::setprecision(precision)
132 << v[i] << separator;
133 ss << std::fixed << std::setw(width) << std::setprecision(precision)
136 for (
unsigned int i = 0; i < v.size() - 1; i++)
137 ss << std::fixed << std::setprecision(precision) << v[i] << separator;
138 ss << std::setprecision(precision) << v[v.size() - 1];
144 enum LoggerVerbosity {
145 VERBOSITY_ALL = MSG_TYPE_DEBUG,
146 VERBOSITY_INFO_WARNING_ERROR = MSG_TYPE_INFO,
147 VERBOSITY_WARNING_ERROR = MSG_TYPE_WARNING,
148 VERBOSITY_ERROR = MSG_TYPE_ERROR,
190 Logger(
double timeSample = 0.001,
double streamPrintPeriod = 1.0);
202 return ::dynamicgraph::RealTimeLogger::instance().front();
213 RealTimeLogger &rtlogger = ::dynamicgraph::RealTimeLogger::instance();
215 return rtlogger.
front();
224 void sendMsg(std::string msg,
MsgType type,
const std::string &lineId =
"");
231 void sendMsg(std::string msg,
MsgType type,
const std::string &file,
232 int line) DYNAMIC_GRAPH_DEPRECATED;
255 LoggerVerbosity m_lv;
267 inline bool isStreamMsg(
MsgType m) {
return (m & MSG_TYPE_STREAM_BIT); }
275 if ((m & MSG_TYPE_TYPE_BITS) > m_lv)
292 #endif // #ifndef __sot_torque_control_logger_H__ Logger(double timeSample=0.001, double streamPrintPeriod=1.0)
bool setTimeSample(double t)
double m_timeSample
verbosity of the logger
RTLoggerStream stream(MsgType type, const std::string &lineId="")
StreamCounterMap_t m_stream_msg_counters
Main class of the real-time logger.
double m_streamPrintPeriod
specify the period of call of the countdown method
void setVerbosity(LoggerVerbosity lv)
std::map< std::string, double > StreamCounterMap_t
every time this is < 0 (i.e. every _streamPrintPeriod sec) print stuff
RTLoggerStream emptyStream()
Return an empty stream object.
double m_printCountdown
specify the time period of the stream prints
double getStreamPrintPeriod()
LoggerVerbosity getVerbosity()
bool acceptMsg(MsgType m, const std::string &lineId)
Class for logging messages.
void sendMsg(std::string msg, MsgType type, const std::string &lineId="")
bool setStreamPrintPeriod(double s)
bool checkStreamPeriod(const std::string &lineId)