lib/log: move internal log to public header

This change will allow external libs to register
SPDK log flags and use log macros by external libs.

Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I03ef088580bbf23bd22ad1a36817ca84c5ba8edd
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3954
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Tomasz Zawadzki 2020-10-01 07:24:17 -04:00
parent 2172c432cf
commit ffbddd4f3e
3 changed files with 74 additions and 53 deletions

View File

@ -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

View File

@ -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.
*

View File

@ -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)) { \