diff --git a/CHANGELOG.md b/CHANGELOG.md index 590034173..b7bb209a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,13 @@ Updated intel-ipsec-mb submodule to v0.54 Updated ISA-L submodule to v2.29.0. +## log + +A log flag structure, `spdk_log_register_flag`, `spdk_log_get_first_flag`, +`spdk_log_get_next_flag` and macro `SPDK_LOG_REGISTER_COMPONENT`, have been added which +enable registering and interacting with log flags. Added `SPDK_INFOLOG`, `SPDK_DEBUGLOG` +and `SPDK_LOGDUMP` macros to display logs for specified log flag. + ### ocf Updated OCF submodule to v20.03.1 diff --git a/include/spdk/log.h b/include/spdk/log.h index 241250488..ec7ffd1dd 100644 --- a/include/spdk/log.h +++ b/include/spdk/log.h @@ -40,6 +40,7 @@ #define SPDK_LOG_H #include "spdk/stdinc.h" +#include "spdk/queue.h" #ifdef __cplusplus extern "C" { @@ -131,6 +132,32 @@ enum spdk_log_level spdk_log_get_print_level(void); spdk_log(SPDK_LOG_ERROR, __FILE__, __LINE__, __func__, __VA_ARGS__) #define SPDK_PRINTF(...) \ spdk_log(SPDK_LOG_NOTICE, NULL, -1, NULL, __VA_ARGS__) +#define SPDK_INFOLOG(FLAG, ...) \ + do { \ + if (spdk_log_get_flag(#FLAG)) { \ + spdk_log(SPDK_LOG_INFO, __FILE__, __LINE__, __func__, __VA_ARGS__); \ + } \ + } while (0) + +#ifdef DEBUG +#define SPDK_DEBUGLOG(FLAG, ...) \ + do { \ + if (SPDK_DEBUGLOG_FLAG_ENABLED(#FLAG)) { \ + spdk_log(SPDK_LOG_DEBUG, __FILE__, __LINE__, __func__, __VA_ARGS__); \ + } \ + } while (0) + +#define SPDK_LOGDUMP(FLAG, LABEL, BUF, LEN) \ + do { \ + if (SPDK_DEBUGLOG_FLAG_ENABLED(#FLAG)) { \ + spdk_log_dump(stderr, (LABEL), (BUF), (LEN)); \ + } \ + } while (0) + +#else +#define SPDK_DEBUGLOG(...) do { } while (0) +#define SPDK_LOGDUMP(...) do { } while (0) +#endif /** * Write messages to the log file. If \c level is set to \c SPDK_LOG_DISABLED, @@ -169,6 +196,46 @@ void spdk_vlog(enum spdk_log_level level, const char *file, const int line, cons */ void spdk_log_dump(FILE *fp, const char *label, const void *buf, size_t len); +struct spdk_log_flag { + TAILQ_ENTRY(spdk_log_flag) tailq; + const char *name; + bool enabled; +}; + +/** + * Register a log flag. + * + * \param name Name of the log flag. + * \param flag Log flag to be added. + */ +void spdk_log_register_flag(const char *name, struct spdk_log_flag *flag); + +#define SPDK_LOG_REGISTER_COMPONENT(FLAG) \ +struct spdk_log_flag SPDK_LOG_##FLAG = { \ + .enabled = false, \ + .name = #FLAG, \ +}; \ +__attribute__((constructor)) static void register_flag_##FLAG(void) \ +{ \ + spdk_log_register_flag(#FLAG, &SPDK_LOG_##FLAG); \ +} + +/** + * Get the first registered log flag. + * + * \return The first registered log flag. + */ +struct spdk_log_flag *spdk_log_get_first_flag(void); + +/** + * Get the next registered log flag. + * + * \param flag The current log flag. + * + * \return The next registered log flag. + */ +struct spdk_log_flag *spdk_log_get_next_flag(struct spdk_log_flag *flag); + /** * Check whether the log flag exists and is enabled. * diff --git a/include/spdk_internal/log.h b/include/spdk_internal/log.h index bc8e39df2..8a420861b 100644 --- a/include/spdk_internal/log.h +++ b/include/spdk_internal/log.h @@ -40,63 +40,10 @@ #define SPDK_INTERNAL_LOG_H #include "spdk/log.h" -#include "spdk/queue.h" extern enum spdk_log_level g_spdk_log_level; extern enum spdk_log_level g_spdk_log_print_level; -struct spdk_log_flag { - TAILQ_ENTRY(spdk_log_flag) tailq; - const char *name; - bool enabled; -}; - -void spdk_log_register_flag(const char *name, struct spdk_log_flag *flag); - -struct spdk_log_flag *spdk_log_get_first_flag(void); -struct spdk_log_flag *spdk_log_get_next_flag(struct spdk_log_flag *flag); - -#define SPDK_LOG_REGISTER_COMPONENT(FLAG) \ -struct spdk_log_flag SPDK_LOG_##FLAG = { \ - .enabled = false, \ - .name = #FLAG, \ -}; \ -__attribute__((constructor)) static void register_flag_##FLAG(void) \ -{ \ - spdk_log_register_flag(#FLAG, &SPDK_LOG_##FLAG); \ -} - -#define SPDK_INFOLOG(FLAG, ...) \ - do { \ - extern struct spdk_log_flag SPDK_LOG_##FLAG; \ - if (SPDK_LOG_##FLAG.enabled) { \ - spdk_log(SPDK_LOG_INFO, __FILE__, __LINE__, __func__, __VA_ARGS__); \ - } \ - } while (0) - -#ifdef DEBUG - -#define SPDK_DEBUGLOG(FLAG, ...) \ - do { \ - extern struct spdk_log_flag SPDK_LOG_##FLAG; \ - if (SPDK_LOG_##FLAG.enabled) { \ - spdk_log(SPDK_LOG_DEBUG, __FILE__, __LINE__, __func__, __VA_ARGS__); \ - } \ - } while (0) - -#define SPDK_LOGDUMP(FLAG, LABEL, BUF, LEN) \ - do { \ - extern struct spdk_log_flag SPDK_LOG_##FLAG; \ - if ((SPDK_LOG_##FLAG.enabled) && (LEN)) { \ - spdk_log_dump(stderr, (LABEL), (BUF), (LEN)); \ - } \ - } while (0) - -#else -#define SPDK_DEBUGLOG(...) do { } while (0) -#define SPDK_LOGDUMP(...) do { } while (0) -#endif - #define SPDK_ERRLOGDUMP(LABEL, BUF, LEN) \ do { \ if ((LEN)) { \