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__