23 #include <rte_config.h> 30 #define RTE_LOGTYPE_EAL 0 53 #define RTE_LOGTYPE_USER1 24 54 #define RTE_LOGTYPE_USER2 25 55 #define RTE_LOGTYPE_USER3 26 56 #define RTE_LOGTYPE_USER4 27 57 #define RTE_LOGTYPE_USER5 28 58 #define RTE_LOGTYPE_USER6 29 59 #define RTE_LOGTYPE_USER7 30 60 #define RTE_LOGTYPE_USER8 31 63 #define RTE_LOGTYPE_FIRST_EXT_ID 32 66 #define RTE_LOG_EMERG 1U 67 #define RTE_LOG_ALERT 2U 68 #define RTE_LOG_CRIT 3U 69 #define RTE_LOG_ERR 4U 70 #define RTE_LOG_WARNING 5U 71 #define RTE_LOG_NOTICE 6U 72 #define RTE_LOG_INFO 7U 73 #define RTE_LOG_DEBUG 8U 74 #define RTE_LOG_MAX RTE_LOG_DEBUG 89 int rte_openlog_stream(FILE *f); 280 int rte_log(uint32_t level, uint32_t logtype,
const char *format, ...)
310 int rte_vlog(uint32_t level, uint32_t logtype, const
char *format, va_list ap)
311 __rte_format_printf(3, 0);
332 #define RTE_LOG(l, t, ...) \ 333 rte_log(RTE_LOG_ ## l, \ 334 RTE_LOGTYPE_ ## t, # t ": " __VA_ARGS__) 356 #define RTE_LOG_DP(l, t, ...) \ 357 (void)((RTE_LOG_ ## l <= RTE_LOG_DP_LEVEL) ? \ 358 rte_log(RTE_LOG_ ## l, \ 359 RTE_LOGTYPE_ ## t, # t ": " __VA_ARGS__) : \ 362 #if defined(RTE_TOOLCHAIN_GCC) && !defined(PEDANTIC) 363 #define RTE_LOG_CHECK_NO_NEWLINE(fmt) \ 364 static_assert(!__builtin_strchr(fmt, '\n'), \ 365 "This log format string contains a \\n") 367 #define RTE_LOG_CHECK_NO_NEWLINE(...) 386 #define RTE_LOG_LINE(l, t, ...) do { \ 387 RTE_LOG_CHECK_NO_NEWLINE(RTE_FMT_HEAD(__VA_ARGS__ ,)); \ 388 RTE_LOG(l, t, RTE_FMT(RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 389 RTE_FMT_TAIL(__VA_ARGS__ ,))); \ 413 #define RTE_LOG_DP_LINE(l, t, ...) do { \ 414 RTE_LOG_CHECK_NO_NEWLINE(RTE_FMT_HEAD(__VA_ARGS__ ,)); \ 415 RTE_LOG_DP(l, t, RTE_FMT(RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 416 RTE_FMT_TAIL(__VA_ARGS__ ,))); \ 419 #define RTE_LOG_COMMA , 444 #define RTE_LOG_LINE_PREFIX(l, t, prefix, args, ...) do { \ 445 RTE_LOG_CHECK_NO_NEWLINE(RTE_FMT_HEAD(prefix __VA_ARGS__ ,)); \ 446 RTE_LOG(l, t, RTE_FMT(prefix RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 447 args RTE_LOG_COMMA RTE_FMT_TAIL(__VA_ARGS__ ,))); \ 473 #define RTE_LOG_DP_LINE_PREFIX(l, t, prefix, args, ...) do { \ 474 RTE_LOG_CHECK_NO_NEWLINE(RTE_FMT_HEAD(prefix __VA_ARGS__ ,)); \ 475 RTE_LOG_DP(l, t, RTE_FMT(prefix RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ 476 args RTE_LOG_COMMA RTE_FMT_TAIL(__VA_ARGS__ ,))); \ 479 #define RTE_LOG_REGISTER_IMPL(type, name, level) \ 483 type = rte_log_register_type_and_pick_level(name, RTE_LOG_##level); \ 485 type = RTE_LOGTYPE_EAL; \ 501 #define RTE_LOG_REGISTER(type, name, level) \ 502 RTE_LOG_REGISTER_IMPL(type, RTE_STR(name), level) 508 #define RTE_LOG_REGISTER_DEFAULT(type, level) \ 509 RTE_LOG_REGISTER_IMPL(type, RTE_STR(RTE_LOG_DEFAULT_LOGTYPE), level) 515 #define RTE_LOG_REGISTER_SUFFIX(type, suffix, level) \ 516 RTE_LOG_REGISTER_IMPL(type, \ 517 RTE_STR(RTE_LOG_DEFAULT_LOGTYPE) "." RTE_STR(suffix), level) int rte_log_set_level_pattern(const char *pattern, uint32_t level)
bool rte_log_can_log(uint32_t logtype, uint32_t loglevel)
int rte_log_set_level_regexp(const char *regex, uint32_t level)
int rte_log_set_level(uint32_t logtype, uint32_t level)
void rte_log_dump(FILE *f)
void rte_log_list_types(FILE *out, const char *prefix)
#define __rte_format_printf(format_index, first_arg)
uint32_t rte_log_get_global_level(void)
int rte_log_cur_msg_logtype(void)
int rte_log_register_type_and_pick_level(const char *name, uint32_t level_def)
FILE * rte_log_get_stream(void)
int rte_log(uint32_t level, uint32_t logtype, const char *format,...) __rte_cold __rte_format_printf(3
int rte_log_get_level(uint32_t logtype)
void rte_log_set_global_level(uint32_t level)
int int rte_vlog(uint32_t level, uint32_t logtype, const char *format, va_list ap) __rte_format_printf(3
int rte_log_register(const char *name)
int rte_log_cur_msg_loglevel(void)