12 #ifndef HPP_SERVICE_LOG_CONFIG_HPP_
13 #define HPP_SERVICE_LOG_CONFIG_HPP_
18 #include "log/log_common.h"
20 #include <rti/config/Logger.hpp>
21 #include <rti/service/ServiceException.hpp>
23 #define RTI_SUBMODULE_MASK_ALL (0xFFFF)
25 namespace rti {
namespace service {
namespace log {
30 static LogConfig& instance()
32 static LogConfig singleton;
36 RTILogBitmap instrumentation_mask()
const
38 return instrumentation_mask_;
41 LogConfig& instrumentation_mask(RTILogBitmap logmask)
43 instrumentation_mask_ = logmask;
47 rti::config::Verbosity verbosity()
49 return static_cast<rti::config::Verbosity::type
>(instrumentation_mask_);
52 void verbosity(rti::config::Verbosity verbosity)
55 static_cast<RTILogBitmap>(verbosity.underlying()));
62 static RTILogBitmap mask_all()
64 return RTI_SUBMODULE_MASK_ALL;
67 static RTILogBitmap mask_none()
76 : instrumentation_mask_(RTI_LOG_BIT_EXCEPTION)
78 RTILog_printMask |= RTI_LOG_PRINT_BIT_AT_METHOD;
81 RTILogBitmap instrumentation_mask_;
85 rti::config::Verbosity dds_verbosity_from_level(int32_t level)
89 return rti::config::Verbosity::STATUS_REMOTE;
93 return rti::config::Verbosity::WARNING;
99 return rti::config::Verbosity::EXCEPTION;
101 return rti::config::Verbosity::SILENT;
103 return rti::config::Verbosity::EXCEPTION;
108 rti::config::Verbosity service_verbosity_from_level(int32_t level)
110 RTILogBitmap native_verbosity = RTI_LOG_BIT_SILENCE;
115 native_verbosity |= RTI_LOG_BIT_CONTENT;
118 native_verbosity |= RTI_LOG_BIT_PERIODIC;
122 native_verbosity |= RTI_LOG_BIT_REMOTE;
124 native_verbosity |= RTI_LOG_BIT_LOCAL;
127 native_verbosity |= RTI_LOG_BIT_WARN;
130 native_verbosity |= RTI_LOG_BIT_EXCEPTION;
135 native_verbosity = RTI_LOG_BIT_EXCEPTION;
139 return static_cast<rti::config::Verbosity::type
>(native_verbosity);
148 inline void log_service_exception(
149 rti::service::log::LogConfig& log_config,
150 const rti::service::ServiceException& exception,
151 const char *catch_context)
153 RTILogMessage log_message;
155 log_message.format =
"caught exception from:\n %s";
156 log_message.logNumber = exception.error_code();
158 RTILog_logWithContext(
159 DEFINE_MODULE_NUMBER(MODULE_NS),
160 log_config.instrumentation_mask(),
161 RTI_SUBMODULE_MASK_ALL,
162 RTI_LOG_BIT_EXCEPTION,
163 RTI_SUBMODULE_MASK_ALL,
177 #define SERVICELog_fromException(SERVICE_EXCEPTION) \
178 rti::service::log::log_service_exception(\
179 (MODULE_LOG_CONFIG), \
183 #define SERVICELog_freeForm(INSTRUMENT_BIT, ...) \
185 (MODULE_LOG_CONFIG).instrumentation_mask(), \
186 RTI_SUBMODULE_MASK_ALL, \
188 RTI_SUBMODULE_MASK_ALL, \
191 #define SERVICELog_logMessage(INSTRUMENT_BIT, ...) \
192 if ((RTILog_setLogLevel != NULL) \
193 && ((MODULE_LOG_CONFIG).instrumentation_mask() & (INSTRUMENT_BIT)) \
194 && RTI_SUBMODULE_MASK_ALL) { \
195 RTILog_setLogLevel((INSTRUMENT_BIT)); \
197 if (((MODULE_LOG_CONFIG).instrumentation_mask() & ((INSTRUMENT_BIT))) \
198 && RTI_SUBMODULE_MASK_ALL) \
199 RTILog_printContextAndMsg(NULL, __VA_ARGS__)
201 #define SERVICELog_logWithMethodName(INSTRUMENT_BIT, ...) \
202 RTILog_logWithContext(\
203 DEFINE_MODULE_NUMBER(MODULE_NS), \
204 (MODULE_LOG_CONFIG).instrumentation_mask(), \
205 RTI_SUBMODULE_MASK_ALL, \
207 RTI_SUBMODULE_MASK_ALL, \
210 #define SERVICELog_exception( ...) \
212 DEFINE_MODULE_NUMBER(MODULE_NS), \
213 (MODULE_LOG_CONFIG).instrumentation_mask(), \
214 RTI_SUBMODULE_MASK_ALL, \
215 RTI_LOG_BIT_EXCEPTION, \
216 RTI_SUBMODULE_MASK_ALL, \
219 #define SERVICELog_warn( ...) \
221 DEFINE_MODULE_NUMBER(MODULE_NS), \
222 (MODULE_LOG_CONFIG).instrumentation_mask(), \
223 RTI_SUBMODULE_MASK_ALL, \
225 RTI_SUBMODULE_MASK_ALL, \
228 #define SERVICELog_local( ...) \
230 DEFINE_MODULE_NUMBER(MODULE_NS), \
231 (MODULE_LOG_CONFIG).instrumentation_mask(), \
232 RTI_SUBMODULE_MASK_ALL, \
234 RTI_SUBMODULE_MASK_ALL, \
237 #define SERVICELog_content( ...) \
239 DEFINE_MODULE_NUMBER(MODULE_NS), \
240 (MODULE_LOG_CONFIG).instrumentation_mask(), \
241 RTI_SUBMODULE_MASK_ALL, \
242 RTI_LOG_BIT_CONTENT, \
243 RTI_SUBMODULE_MASK_ALL, \
246 #define SERVICELog_remote( ...) \
248 DEFINE_MODULE_NUMBER(MODULE_NS), \
249 (MODULE_LOG_CONFIG).instrumentation_mask(), \
250 RTI_SUBMODULE_MASK_ALL, \
251 RTI_LOG_BIT_REMOTE, \
252 RTI_SUBMODULE_MASK_ALL, \
256 #define SERVICELog_any(INSTRUMENT_BIT, ...) \
257 if ((RTILog_setLogLevel != NULL) \
258 && (((MODULE_LOG_CONFIG).instrumentation_mask()) & (INSTRUMENT_BIT)) \
259 && ((RTI_SUBMODULE_MASK_ALL) & (RTI_SUBMODULE_MASK_ALL))) { \
260 RTILog_setLogLevel((INSTRUMENT_BIT)); \
262 if ((((MODULE_LOG_CONFIG).instrumentation_mask()) & (INSTRUMENT_BIT)) \
263 && ((RTI_SUBMODULE_MASK_ALL) & (RTI_SUBMODULE_MASK_ALL)))
265 #define SERVICELog_flushActivityContextWithAction(INSTRUMENT_BIT, ACTION) \
266 if ((RTILog_setLogLevel != NULL) \
267 && ((MODULE_LOG_CONFIG).instrumentation_mask() & (INSTRUMENT_BIT)) \
268 && RTI_SUBMODULE_MASK_ALL) { \
269 RTILog_setLogLevel((INSTRUMENT_BIT)); \
271 if (((MODULE_LOG_CONFIG).instrumentation_mask() & ((INSTRUMENT_BIT))) \
272 && RTI_SUBMODULE_MASK_ALL) \
273 RTILog_printContextAndMsg("", &RTI_LOG_ANY_s, (ACTION));
275 #define SERVICELog_flushActivityContext(INSTRUMENT_BIT) \
276 SERVICELog_logMessage((INSTRUMENT_BIT), &RTI_LOG_ANY_s, "");