USRP Hardware Driver and USRP Manual  Version: 4.1.0.4-3
UHD and USRP Manual
log.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2011 Ettus Research LLC
3 // Copyright 2018 Ettus Research, a National Instruments Company
4 //
5 // SPDX-License-Identifier: GPL-3.0-or-later
6 //
7 
8 #pragma once
9 
10 #include <uhd/config.hpp>
11 #include <boost/current_function.hpp>
12 #include <boost/thread/thread.hpp>
13 #include <iomanip>
14 #include <iostream>
15 #include <ostream>
16 #include <sstream>
17 #include <string>
18 
98 /*
99  * Advanced logging macros
100  * UHD_LOG_MIN_LEVEL definitions
101  * trace: 0
102  * debug: 1
103  * info: 2
104  * warning: 3
105  * error: 4
106  * fatal: 5
107  */
108 
109 namespace uhd { namespace log {
116  trace = 0,
117  debug = 1,
118  info = 2,
119  warning = 3,
120  error = 4,
121  fatal = 5,
122  off = 6,
123 };
124 
131 {
132  logging_info() : verbosity(uhd::log::off) {}
133  logging_info(const boost::posix_time::ptime& time_,
134  const uhd::log::severity_level& verbosity_,
135  const std::string& file_,
136  const unsigned int& line_,
137  const std::string& component_,
138  const boost::thread::id& thread_id_)
139  : time(time_)
140  , verbosity(verbosity_)
141  , file(file_)
142  , line(line_)
143  , component(component_)
144  , thread_id(thread_id_)
145  { /* nop */
146  }
147 
148  boost::posix_time::ptime time;
150  std::string file;
151  unsigned int line;
152  std::string component;
153  boost::thread::id thread_id;
154  std::string message;
155 };
156 
164 
170 
176 
184 UHD_API void set_logger_level(const std::string& logger, uhd::log::severity_level level);
185 }} // namespace uhd::log
186 
189 #define _UHD_LOG_INTERNAL(component, level) \
190  uhd::_log::log(level, __FILE__, __LINE__, component, boost::this_thread::get_id())
192 
193 // macro-style logging (compile-time determined)
194 #if UHD_LOG_MIN_LEVEL < 1
195 # define UHD_LOG_TRACE(component, message) \
196  _UHD_LOG_INTERNAL(component, uhd::log::trace) << message;
197 #else
198 # define UHD_LOG_TRACE(component, message)
199 #endif
200 
201 #if UHD_LOG_MIN_LEVEL < 2
202 # define UHD_LOG_DEBUG(component, message) \
203  _UHD_LOG_INTERNAL(component, uhd::log::debug) << message;
204 #else
205 # define UHD_LOG_DEBUG(component, message)
206 #endif
207 
208 #if UHD_LOG_MIN_LEVEL < 3
209 # define UHD_LOG_INFO(component, message) \
210  _UHD_LOG_INTERNAL(component, uhd::log::info) << message;
211 #else
212 # define UHD_LOG_INFO(component, message)
213 #endif
214 
215 #if UHD_LOG_MIN_LEVEL < 4
216 # define UHD_LOG_WARNING(component, message) \
217  _UHD_LOG_INTERNAL(component, uhd::log::warning) << message;
218 #else
219 # define UHD_LOG_WARNING(component, message)
220 #endif
221 
222 #if UHD_LOG_MIN_LEVEL < 5
223 # define UHD_LOG_ERROR(component, message) \
224  _UHD_LOG_INTERNAL(component, uhd::log::error) << message;
225 #else
226 # define UHD_LOG_ERROR(component, message)
227 #endif
228 
229 #if UHD_LOG_MIN_LEVEL < 6
230 # define UHD_LOG_FATAL(component, message) \
231  _UHD_LOG_INTERNAL(component, uhd::log::fatal) << message;
232 #else
233 # define UHD_LOG_FATAL(component, message)
234 #endif
235 
236 #define RFNOC_LOG_TRACE(message) UHD_LOG_TRACE(this->get_unique_id(), message)
237 #define RFNOC_LOG_DEBUG(message) UHD_LOG_DEBUG(this->get_unique_id(), message)
238 #define RFNOC_LOG_INFO(message) UHD_LOG_INFO(this->get_unique_id(), message)
239 #define RFNOC_LOG_WARNING(message) UHD_LOG_WARNING(this->get_unique_id(), message)
240 #define RFNOC_LOG_ERROR(message) UHD_LOG_ERROR(this->get_unique_id(), message)
241 #define RFNOC_LOG_FATAL(message) UHD_LOG_FATAL(this->get_unique_id(), message)
242 
243 #ifndef UHD_LOG_FASTPATH_DISABLE
245 // No metadata is tracked. Only the message is displayed. This does not go
246 // through the regular backends. Mostly used for printing the UOSDL characters
247 // during streaming.
248 # define UHD_LOG_FASTPATH(message) uhd::_log::log_fastpath(message);
249 #else
250 # define UHD_LOG_FASTPATH(message)
251 #endif
252 
253 // iostream-style logging
254 #define UHD_LOGGER_TRACE(component) _UHD_LOG_INTERNAL(component, uhd::log::trace)
255 #define UHD_LOGGER_DEBUG(component) _UHD_LOG_INTERNAL(component, uhd::log::debug)
256 #define UHD_LOGGER_INFO(component) _UHD_LOG_INTERNAL(component, uhd::log::info)
257 #define UHD_LOGGER_WARNING(component) _UHD_LOG_INTERNAL(component, uhd::log::warning)
258 #define UHD_LOGGER_ERROR(component) _UHD_LOG_INTERNAL(component, uhd::log::error)
259 #define UHD_LOGGER_FATAL(component) _UHD_LOG_INTERNAL(component, uhd::log::fatal)
260 
261 
262 #if defined(__GNUG__)
264 # define UHD_HERE() \
265  UHD_LOGGER_DEBUG("DEBUG") \
266  << __FILE__ << ":" << __LINE__ << " (" << __PRETTY_FUNCTION__ << ")";
267 #else
269 # define UHD_HERE() UHD_LOGGER_DEBUG("DEBUG") << __FILE__ << ":" << __LINE__;
270 #endif
271 
273 #define UHD_VAR(var) UHD_LOGGER_DEBUG("DEBUG") << #var << " = " << var;
274 
276 #define UHD_HEX(var) \
277  UHD_LOGGER_DEBUG("DEBUG") << #var << " = 0x" << std::hex << std::setfill('0') \
278  << std::setw(8) << var << std::dec;
279 
281 namespace uhd {
282 namespace _log {
283 
285 void UHD_API log_fastpath(const std::string&);
286 
288 class UHD_API log
289 {
290 public:
291  log(const uhd::log::severity_level verbosity,
292  const std::string& file,
293  const unsigned int line,
294  const std::string& component,
295  const boost::thread::id thread_id);
296 
297  ~log(void);
298 
299 // Macro for overloading insertion operators to avoid costly
300 // conversion of types if not logging.
301 #define INSERTION_OVERLOAD(x) \
302  log& operator<<(x) \
303  { \
304  if (_log_it) { \
305  _ss << val; \
306  } \
307  return *this; \
308  }
309 
310  // General insertion overload
311  template <typename T>
312  INSERTION_OVERLOAD(T val)
313 
314  // Insertion overloads for std::ostream manipulators
315  INSERTION_OVERLOAD(std::ostream& (*val)(std::ostream&))
316  INSERTION_OVERLOAD(std::ios& (*val)(std::ios&))
317  INSERTION_OVERLOAD(std::ios_base& (*val)(std::ios_base&))
318 
319  private : uhd::log::logging_info _log_info;
320  std::ostringstream _ss;
321  const bool _log_it;
322 };
323 
324 } // namespace _log
326 } /* namespace uhd */
#define UHD_API
Definition: config.h:70
UHD_API void set_logger_level(const std::string &logger, uhd::log::severity_level level)
UHD_API void set_console_level(uhd::log::severity_level level)
UHD_API void set_log_level(uhd::log::severity_level level)
UHD_API void set_file_level(uhd::log::severity_level level)
severity_level
Definition: log.hpp:115
@ warning
Definition: log.hpp:119
@ fatal
Definition: log.hpp:121
@ error
Definition: log.hpp:120
@ trace
Definition: log.hpp:116
@ off
Definition: log.hpp:122
@ info
Definition: log.hpp:118
@ debug
Definition: log.hpp:117
Definition: build_info.hpp:12
Definition: log.hpp:131
std::string file
Definition: log.hpp:150
logging_info()
Definition: log.hpp:132
std::string component
Definition: log.hpp:152
boost::posix_time::ptime time
Definition: log.hpp:148
unsigned int line
Definition: log.hpp:151
uhd::log::severity_level verbosity
Definition: log.hpp:149
logging_info(const boost::posix_time::ptime &time_, const uhd::log::severity_level &verbosity_, const std::string &file_, const unsigned int &line_, const std::string &component_, const boost::thread::id &thread_id_)
Definition: log.hpp:133
boost::thread::id thread_id
Definition: log.hpp:153
std::string message
Definition: log.hpp:154