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:
parent
2172c432cf
commit
ffbddd4f3e
@ -19,6 +19,13 @@ Updated intel-ipsec-mb submodule to v0.54
|
|||||||
|
|
||||||
Updated ISA-L submodule to v2.29.0.
|
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
|
### ocf
|
||||||
|
|
||||||
Updated OCF submodule to v20.03.1
|
Updated OCF submodule to v20.03.1
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#define SPDK_LOG_H
|
#define SPDK_LOG_H
|
||||||
|
|
||||||
#include "spdk/stdinc.h"
|
#include "spdk/stdinc.h"
|
||||||
|
#include "spdk/queue.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
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__)
|
spdk_log(SPDK_LOG_ERROR, __FILE__, __LINE__, __func__, __VA_ARGS__)
|
||||||
#define SPDK_PRINTF(...) \
|
#define SPDK_PRINTF(...) \
|
||||||
spdk_log(SPDK_LOG_NOTICE, NULL, -1, NULL, __VA_ARGS__)
|
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,
|
* 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);
|
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.
|
* Check whether the log flag exists and is enabled.
|
||||||
*
|
*
|
||||||
|
@ -40,63 +40,10 @@
|
|||||||
#define SPDK_INTERNAL_LOG_H
|
#define SPDK_INTERNAL_LOG_H
|
||||||
|
|
||||||
#include "spdk/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_level;
|
||||||
extern enum spdk_log_level g_spdk_log_print_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) \
|
#define SPDK_ERRLOGDUMP(LABEL, BUF, LEN) \
|
||||||
do { \
|
do { \
|
||||||
if ((LEN)) { \
|
if ((LEN)) { \
|
||||||
|
Loading…
Reference in New Issue
Block a user