log.h
1 
5 #pragma once
6 
7 #include <string>
8 #include <unordered_map>
9 
10 #include <ucs/debug/log_def.h>
11 
12 #include <ucxx/typedefs.h>
13 
14 namespace ucxx {
15 
21 extern ucs_log_component_config_t ucxx_log_component_config;
22 
23 // Macros
24 #ifndef UCXX_MAX_LOG_LEVEL
25 #define UCXX_MAX_LOG_LEVEL ucxx::UCXX_LOG_LEVEL_LAST
26 #endif
27 
28 #define ucxx_log_component_is_enabled(_level, _comp_log_config) \
29  ucs_unlikely( \
30  ((_level) <= UCXX_MAX_LOG_LEVEL) && \
31  ((_level) <= \
32  (ucxx::ucxx_log_level_t)(reinterpret_cast<ucs_log_component_config_t*>(_comp_log_config) \
33  ->log_level)))
34 
35 #define ucxx_log_is_enabled(_level) \
36  ucxx_log_component_is_enabled(_level, &ucxx::ucxx_log_component_config)
37 
38 #define ucxx_log_component(_level, _comp_log_config, _fmt, ...) \
39  do { \
40  if (ucxx_log_component_is_enabled(_level, _comp_log_config)) { \
41  ucs_log_dispatch(__FILE__, \
42  __LINE__, \
43  __func__, \
44  (ucs_log_level_t)(_level), \
45  _comp_log_config, \
46  _fmt, \
47  ##__VA_ARGS__); \
48  } \
49  } while (0)
50 
51 #define ucxx_log(_level, _fmt, ...) \
52  do { \
53  ucxx_log_component(_level, &ucxx::ucxx_log_component_config, _fmt, ##__VA_ARGS__); \
54  } while (0)
55 
56 #define ucxx_error(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_ERROR, _fmt, ##__VA_ARGS__)
57 #define ucxx_warn(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_WARN, _fmt, ##__VA_ARGS__)
58 #define ucxx_diag(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_DIAG, _fmt, ##__VA_ARGS__)
59 #define ucxx_info(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_INFO, _fmt, ##__VA_ARGS__)
60 #define ucxx_debug(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_DEBUG, _fmt, ##__VA_ARGS__)
61 #define ucxx_trace(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_TRACE, _fmt, ##__VA_ARGS__)
62 #define ucxx_trace_req(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_TRACE_REQ, _fmt, ##__VA_ARGS__)
63 #define ucxx_trace_data(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_TRACE_DATA, _fmt, ##__VA_ARGS__)
64 #define ucxx_trace_async(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_TRACE_ASYNC, _fmt, ##__VA_ARGS__)
65 #define ucxx_trace_func(_fmt, ...) \
66  ucxx_log(ucxx::UCXX_LOG_LEVEL_TRACE_FUNC, "%s(" _fmt ")", __FUNCTION__, ##__VA_ARGS__)
67 #define ucxx_trace_poll(_fmt, ...) ucxx_log(ucxx::UCXX_LOG_LEVEL_TRACE_POLL, _fmt, ##__VA_ARGS__)
68 
75 const std::unordered_map<std::string, ucxx_log_level_t> logLevelNames = {
76  {"FATAL", UCXX_LOG_LEVEL_FATAL},
77  {"ERROR", UCXX_LOG_LEVEL_ERROR},
78  {"WARN", UCXX_LOG_LEVEL_WARN},
79  {"DIAG", UCXX_LOG_LEVEL_DIAG},
80  {"INFO", UCXX_LOG_LEVEL_INFO},
81  {"DEBUG", UCXX_LOG_LEVEL_DEBUG},
82  {"TRACE", UCXX_LOG_LEVEL_TRACE},
83  {"REQ", UCXX_LOG_LEVEL_TRACE_REQ},
84  {"DATA", UCXX_LOG_LEVEL_TRACE_DATA},
85  {"ASYNC", UCXX_LOG_LEVEL_TRACE_ASYNC},
86  {"FUNC", UCXX_LOG_LEVEL_TRACE_FUNC},
87  {"POLL", UCXX_LOG_LEVEL_TRACE_POLL},
88  {"", UCXX_LOG_LEVEL_LAST},
89  {"PRINT", UCXX_LOG_LEVEL_PRINT}};
90 
96 const char logLevelNameDefault[] = "WARN";
97 
104 const ucs_log_level_t logLevelDefault = (ucs_log_level_t)logLevelNames.at(logLevelNameDefault);
105 
113 
114 } // namespace ucxx
Definition: address.h:15
const std::unordered_map< std::string, ucxx_log_level_t > logLevelNames
Map of log level names to their respective types.
Definition: log.h:75
const ucs_log_level_t logLevelDefault
The type of the default log level.
Definition: log.h:104
ucs_log_component_config_t ucxx_log_component_config
The UCXX log level component configuration.
void parseLogLevel()
Parse the active log level.
const char logLevelNameDefault[]
The name of the default log level.
Definition: log.h:96