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;