Commit ffbddd4f authored by Tomasz Zawadzki's avatar Tomasz Zawadzki
Browse files

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: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I03ef088580bbf23bd22ad1a36817ca84c5ba8edd
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3954


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 2172c432
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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
+67 −0
Original line number Diff line number Diff line
@@ -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.
 *
+0 −53
Original line number Diff line number Diff line
@@ -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)) {						\