From ba32ead5eaae0ebca1f4f81a2da7e25b814af747 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Fri, 14 Jun 2019 23:29:46 -0400 Subject: [PATCH] src/logging/log.h: add BT_LOG_WRITE_CUR_LVL(), BT_LOG_WRITE_ERRNO_CUR_LVL() BT_LOG_WRITE_CUR_LVL() is like BT_LOG_WRITE(), but it compares the given log level to a current log level parameter instead of `_BT_LOG_OUTPUT_LEVEL`. BT_LOG_WRITE_ERRNO_CUR_LVL() is the same thing, but for BT_LOG_WRITE_ERRNO(). The goal of this is to be able to control which variable contains the current log level at the call site to achieve per-component log levels. Signed-off-by: Philippe Proulx Change-Id: I670664a7cb465954c2f0f8b3551ea49fd1465e32 Reviewed-on: https://review.lttng.org/c/babeltrace/+/1459 Tested-by: jenkins Reviewed-by: Francis Deslauriers --- src/logging/log.h | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/logging/log.h b/src/logging/log.h index 7368323d..c9aa4bad 100644 --- a/src/logging/log.h +++ b/src/logging/log.h @@ -660,6 +660,8 @@ bt_log_spec; * * See BT_LOG_OUTPUT_LEVEL for details. */ +#define BT_LOG_ON_CUR_LVL(lvl, cur_lvl) \ + (BT_LOG_ENABLED((lvl)) && (lvl) >= (cur_lvl)) #define BT_LOG_ON(lvl) \ (BT_LOG_ENABLED((lvl)) && (lvl) >= _BT_LOG_OUTPUT_LEVEL) #define BT_LOG_ON_VERBOSE BT_LOG_ON(BT_LOG_VERBOSE) @@ -786,6 +788,9 @@ void _bt_log_write_mem_aux( * - BT_LOG_WRITE_MEM_AUX(&log_instance, level, tag, data_ptr, data_sz, * "format string", args, ...) * + * Explicit log level, current log level, and tag: + * - BT_LOG_WRITE_CUR_LVL(level, cur_level, tag, "format string", args, ...) + * * Format string follows printf() conventions. Both data_ptr and data_sz could * be 0. Tag can be 0 as well. Most compilers will verify that type of arguments * match format specifiers in format string. @@ -799,6 +804,11 @@ void _bt_log_write_mem_aux( if (BT_LOG_ON(lvl)) \ _bt_log_write(lvl, tag, __VA_ARGS__); \ } _BT_LOG_ONCE + #define BT_LOG_WRITE_CUR_LVL(lvl, cur_lvl, tag, ...) \ + do { \ + if (BT_LOG_ON_CUR_LVL((lvl), (cur_lvl))) \ + _bt_log_write(lvl, tag, __VA_ARGS__); \ + } _BT_LOG_ONCE #define BT_LOG_WRITE_MEM(lvl, tag, d, d_sz, ...) \ do { \ if (BT_LOG_ON(lvl)) \ @@ -821,6 +831,12 @@ void _bt_log_write_mem_aux( _bt_log_write_d(_BT_LOG_SRCLOC_FUNCTION, __FILE__, __LINE__, \ lvl, tag, __VA_ARGS__); \ } _BT_LOG_ONCE + #define BT_LOG_WRITE_CUR_LVL(lvl, cur_lvl, tag, ...) \ + do { \ + if (BT_LOG_ON_CUR_LVL((lvl), (cur_lvl))) \ + _bt_log_write_d(_BT_LOG_SRCLOC_FUNCTION, __FILE__, __LINE__, \ + lvl, tag, __VA_ARGS__); \ + } _BT_LOG_ONCE #define BT_LOG_WRITE_MEM(lvl, tag, d, d_sz, ...) \ do { \ if (BT_LOG_ON(lvl)) \ @@ -841,11 +857,16 @@ void _bt_log_write_mem_aux( } _BT_LOG_ONCE #endif -#define BT_LOG_WRITE_ERRNO(lvl, tag, _msg, _fmt, args...) \ +#define BT_LOG_WRITE_ERRNO_CUR_LVL(lvl, cur_lvl, tag, _msg, _fmt, args...) \ do { \ const char *error_str; \ error_str = g_strerror(errno); \ - BT_LOG_WRITE(lvl, tag, _msg ": %s" _fmt, error_str, ## args); \ + BT_LOG_WRITE_CUR_LVL(lvl, cur_lvl, tag, _msg ": %s" _fmt, error_str, ## args); \ + } _BT_LOG_ONCE + +#define BT_LOG_WRITE_ERRNO(lvl, tag, _msg, _fmt, args...) \ + do { \ + BT_LOG_WRITE_ERRNO_CUR_LVL(lvl, _BT_LOG_OUTPUT_LEVEL, tag, _msg, _fmt, ## args); \ } _BT_LOG_ONCE static _BT_LOG_INLINE void _bt_log_unused(const int dummy, ...) {(void)dummy;} -- 2.34.1