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;
289 #endif // #ifndef __sot_torque_control_logger_H__