Commit ae2b2f64 authored by Pawel Wodkowski's avatar Pawel Wodkowski Committed by Jim Harris
Browse files

log: add a way to turn on and off stack unwinding in logs



As a side effect, if SPDK_LOG_DISABLED is used in spdk_log() as log
level then no message will be printed.

Change-Id: I2d57b60a5a310a9ef2a1187a81088d0acf828742
Signed-off-by: default avatarPawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/425105


Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 86bd269e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -37,8 +37,8 @@ CONFIG_PREFIX?=/usr/local
# Build with debug logging. Turn off for performance testing and normal usage
CONFIG_DEBUG?=n

# Show backtrace when logging message at level <= lvl (ERROR, WARN, NOTICE, DEBUG)
#CONFIG_LOG_BACKTRACE?=lvl
# Build with support of backtrace printing in log messages. Requires libunwind.
#CONFIG_LOG_BACKTRACE?=n

# Treat warnings as errors (fail the build on any warning).
CONFIG_WERROR?=n
+6 −13
Original line number Diff line number Diff line
@@ -16,8 +16,7 @@ function usage()
	echo " --prefix=path             Configure installation prefix (default: /usr/local)"
	echo ""
	echo " --enable-debug            Configure for debug builds"
	echo " --enable-log-bt=lvl       Show backtrace using libunwind when logging message at level <= lvl."
	echo "                           Valid values are: ERROR, WARN, NOTICE, DEBUG."
	echo " --enable-log-bt           Enable support of backtrace printing in SPDK logs (requires libunwind)."
	echo " --enable-werror           Treat compiler warnings as errors"
	echo " --enable-asan             Enable address sanitizer"
	echo " --enable-ubsan            Enable undefined behavior sanitizer"
@@ -91,8 +90,11 @@ for i in "$@"; do
		--disable-debug)
			CONFIG_DEBUG=n
			;;
		--enable-log-bt=*)
			CONFIG_LOG_BACKTRACE=${i#*=}
		--enable-log-bt)
			CONFIG_LOG_BACKTRACE=y
			;;
		--disable-log-bt)
			CONFIG_LOG_BACKTRACE=n
			;;
		--enable-asan)
			CONFIG_ASAN=y
@@ -244,15 +246,6 @@ for i in "$@"; do
	esac
done

case "$CONFIG_LOG_BACKTRACE" in
	""|ERROR|WARN|NOTICE|DEBUG)
		;;
	*)
		echo "Invalid '--enable-log-bt=$CONFIG_LOG_BACKTRACE' option. Valid levels are ERROR, WARN, NOTICE or DEBUG"
		exit 1
		;;
esac

if [ -z "$CONFIG_ENV" ]; then
	if [ -z "$CONFIG_DPDK_DIR" ]; then
		rootdir=$(readlink -f $(dirname $0))
+26 −2
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ void spdk_log_open(void);
void spdk_log_close(void);

enum spdk_log_level {
	/** All messages will be suppressed. */
	SPDK_LOG_DISABLED = -1,
	SPDK_LOG_ERROR,
	SPDK_LOG_WARN,
	SPDK_LOG_NOTICE,
@@ -80,10 +82,31 @@ void spdk_log_set_level(enum spdk_log_level level);
 */
enum spdk_log_level spdk_log_get_level(void);

/**
 * Set the log level threshold to include stack trace in log messages.
 * Messages with a higher level than this will not contain stack trace. You
 * can use \c SPDK_LOG_DISABLED to completely disable stack trace printing
 * even if it is supported.
 *
 * \note This function has no effect if SPDK is built without stack trace
 *  printing support.
 *
 * \param level Log level threshold for stacktrace.
 */
void spdk_log_set_backtrace_level(enum spdk_log_level level);

/**
 * Get the current log level threshold for showing stack trace in log message.
 *
 * \return the current log level threshold for stack trace.
 */
enum spdk_log_level spdk_log_get_backtrace_level(void);

/**
 * Set the current log level threshold for printing to stderr.
 * Messages with a level less than or equal to this level
 * are also printed to stderr.
 * are also printed to stderr. You can use \c SPDK_LOG_DISABLED to completely
 * suppress log printing.
 *
 * \param level Log level threshold for printing to stderr.
 */
@@ -104,7 +127,8 @@ enum spdk_log_level spdk_log_get_print_level(void);
	spdk_log(SPDK_LOG_ERROR, __FILE__, __LINE__, __func__, __VA_ARGS__)

/**
 * Write messages to the log file.
 * Write messages to the log file. If \c level is set to \c SPDK_LOG_DISABLED,
 * this log message won't be written.
 *
 * \param level Log level threshold.
 * \param file Name of the current source file.
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@

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_backtrace_level;

struct spdk_trace_flag {
	TAILQ_ENTRY(spdk_trace_flag) tailq;
+2 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@

#define SPDK_APP_DEFAULT_LOG_LEVEL		SPDK_LOG_NOTICE
#define SPDK_APP_DEFAULT_LOG_PRINT_LEVEL	SPDK_LOG_INFO
#define SPDK_APP_DEFAULT_BACKTRACE_LOG_LEVEL	SPDK_LOG_ERROR

#define SPDK_APP_DPDK_DEFAULT_MEM_SIZE		-1
#define SPDK_APP_DPDK_DEFAULT_MASTER_CORE	-1
@@ -591,6 +592,7 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_event_fn start_fn,
	}

	spdk_log_set_level(SPDK_APP_DEFAULT_LOG_LEVEL);
	spdk_log_set_backtrace_level(SPDK_APP_DEFAULT_BACKTRACE_LOG_LEVEL);

	if (spdk_app_setup_env(opts) < 0) {
		goto app_start_setup_conf_err;
Loading