11 #include <boost/date_time/posix_time/posix_time_types.hpp> 
   12 #include <boost/optional.hpp> 
  110 namespace uhd { 
namespace log {
 
  130     const std::string& log_level_str);
 
  142         const std::string& file_,
 
  143         const unsigned int& line_,
 
  144         const std::string& component_,
 
  145         const std::thread::id& thread_id_)
 
  147         , verbosity(verbosity_)
 
  150         , component(component_)
 
  151         , thread_id(thread_id_)
 
  196 #define _UHD_LOG_INTERNAL(component, level) \ 
  197     uhd::_log::log(level, __FILE__, __LINE__, component, std::this_thread::get_id()) 
  201 #if UHD_LOG_MIN_LEVEL < 1 
  202 #    define UHD_LOG_TRACE(component, message) \ 
  203         _UHD_LOG_INTERNAL(component, uhd::log::trace) << message; 
  205 #    define UHD_LOG_TRACE(component, message) 
  208 #if UHD_LOG_MIN_LEVEL < 2 
  209 #    define UHD_LOG_DEBUG(component, message) \ 
  210         _UHD_LOG_INTERNAL(component, uhd::log::debug) << message; 
  212 #    define UHD_LOG_DEBUG(component, message) 
  215 #if UHD_LOG_MIN_LEVEL < 3 
  216 #    define UHD_LOG_INFO(component, message) \ 
  217         _UHD_LOG_INTERNAL(component, uhd::log::info) << message; 
  219 #    define UHD_LOG_INFO(component, message) 
  222 #if UHD_LOG_MIN_LEVEL < 4 
  223 #    define UHD_LOG_WARNING(component, message) \ 
  224         _UHD_LOG_INTERNAL(component, uhd::log::warning) << message; 
  226 #    define UHD_LOG_WARNING(component, message) 
  229 #if UHD_LOG_MIN_LEVEL < 5 
  230 #    define UHD_LOG_ERROR(component, message) \ 
  231         _UHD_LOG_INTERNAL(component, uhd::log::error) << message; 
  233 #    define UHD_LOG_ERROR(component, message) 
  236 #define UHD_LOG_THROW(exception_type, component, message) \ 
  238         std::ostringstream __ss;                          \ 
  240         UHD_LOG_ERROR(component, __ss.str());             \ 
  241         throw exception_type(__ss.str());                 \ 
  244 #if UHD_LOG_MIN_LEVEL < 6 
  245 #    define UHD_LOG_FATAL(component, message) \ 
  246         _UHD_LOG_INTERNAL(component, uhd::log::fatal) << message; 
  248 #    define UHD_LOG_FATAL(component, message) 
  251 #define RFNOC_LOG_TRACE(message) UHD_LOG_TRACE(this->get_unique_id(), message) 
  252 #define RFNOC_LOG_DEBUG(message) UHD_LOG_DEBUG(this->get_unique_id(), message) 
  253 #define RFNOC_LOG_INFO(message) UHD_LOG_INFO(this->get_unique_id(), message) 
  254 #define RFNOC_LOG_WARNING(message) UHD_LOG_WARNING(this->get_unique_id(), message) 
  255 #define RFNOC_LOG_ERROR(message) UHD_LOG_ERROR(this->get_unique_id(), message) 
  256 #define RFNOC_LOG_FATAL(message) UHD_LOG_FATAL(this->get_unique_id(), message) 
  258 #ifndef UHD_LOG_FASTPATH_DISABLE 
  263 #    define UHD_LOG_FASTPATH(message) uhd::_log::log_fastpath(message); 
  265 #    define UHD_LOG_FASTPATH(message) 
  269 #define UHD_LOGGER_TRACE(component) _UHD_LOG_INTERNAL(component, uhd::log::trace) 
  270 #define UHD_LOGGER_DEBUG(component) _UHD_LOG_INTERNAL(component, uhd::log::debug) 
  271 #define UHD_LOGGER_INFO(component) _UHD_LOG_INTERNAL(component, uhd::log::info) 
  272 #define UHD_LOGGER_WARNING(component) _UHD_LOG_INTERNAL(component, uhd::log::warning) 
  273 #define UHD_LOGGER_ERROR(component) _UHD_LOG_INTERNAL(component, uhd::log::error) 
  274 #define UHD_LOGGER_FATAL(component) _UHD_LOG_INTERNAL(component, uhd::log::fatal) 
  277 #if defined(__GNUG__) 
  278 #    define UHD_HERE()            \ 
  280         UHD_LOGGER_DEBUG("DEBUG") \ 
  281             << __FILE__ << ":" << __LINE__ << " (" << UHD_PRETTY_FUNCTION << ")"; 
  283 #    define UHD_HERE() UHD_LOGGER_DEBUG("DEBUG") << __FILE__ << ":" << __LINE__; 
  288 #define UHD_VAR(var) UHD_LOGGER_DEBUG("DEBUG") << #var << " = " << var; 
  291 #define UHD_HEX(var)                                                              \ 
  292     UHD_LOGGER_DEBUG("DEBUG") << #var << " = 0x" << std::hex << std::setfill('0') \ 
  293                               << std::setw(8) << var << std::dec; 
  300 void UHD_API log_fastpath(
const std::string&);
 
  307         const std::string& file,
 
  308         const unsigned int line,
 
  309         const std::string& component,
 
  310         const std::thread::id thread_id);
 
  316 #define INSERTION_OVERLOAD(x) \ 
  326     template <
typename T>
 
  327     INSERTION_OVERLOAD(T val)
 
  330     INSERTION_OVERLOAD(std::ostream& (*val)(std::ostream&))
 
  331         INSERTION_OVERLOAD(std::ios& (*val)(std::ios&))
 
  332             INSERTION_OVERLOAD(std::ios_base& (*val)(std::ios_base&))
 
  335     std::ostringstream _ss;