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
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
280int rte_log(uint32_t level, uint32_t logtype,
const char *format, ...)
310int rte_vlog(uint32_t level, uint32_t logtype, const
char *format, va_list ap)
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)
#define __rte_format_printf(format_index, first_arg)
int rte_log_set_level_pattern(const char *pattern, uint32_t level)
void rte_log_list_types(FILE *out, const char *prefix)
int rte_log_register_type_and_pick_level(const char *name, uint32_t level_def)
int rte_log_get_level(uint32_t logtype)
void rte_log_set_global_level(uint32_t level)
int rte_log_set_level(uint32_t logtype, uint32_t level)
uint32_t rte_log_get_global_level(void)
int rte_log_cur_msg_loglevel(void)
FILE * rte_log_get_stream(void)
int rte_log_cur_msg_logtype(void)
int rte_log_register(const char *name)
int int rte_vlog(uint32_t level, uint32_t logtype, const char *format, va_list ap) __rte_format_printf(3
void rte_log_dump(FILE *f)
int rte_log_set_level_regexp(const char *regex, uint32_t level)
bool rte_log_can_log(uint32_t logtype, uint32_t loglevel)
int rte_log(uint32_t level, uint32_t logtype, const char *format,...) __rte_cold __rte_format_printf(3
int rte_openlog_stream(FILE *f)