Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/rcutils/logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ enum RCUTILS_LOG_SEVERITY
RCUTILS_LOG_SEVERITY_UNSET = 0, ///< The unset log level
RCUTILS_LOG_SEVERITY_DEBUG = 10, ///< The debug log level
RCUTILS_LOG_SEVERITY_INFO = 20, ///< The info log level
RCUTILS_LOG_SEVERITY_SUCCESS = 26, ///< The success log level
RCUTILS_LOG_SEVERITY_WARN = 30, ///< The warn log level
RCUTILS_LOG_SEVERITY_ERROR = 40, ///< The error log level
RCUTILS_LOG_SEVERITY_FATAL = 50, ///< The fatal log level
Expand Down
126 changes: 122 additions & 4 deletions include/rcutils/logging_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ extern "C"
// These are used for compiling out logging macros lower than a minimum severity.
#define RCUTILS_LOG_MIN_SEVERITY_DEBUG 0
#define RCUTILS_LOG_MIN_SEVERITY_INFO 1
#define RCUTILS_LOG_MIN_SEVERITY_WARN 2
#define RCUTILS_LOG_MIN_SEVERITY_ERROR 3
#define RCUTILS_LOG_MIN_SEVERITY_FATAL 4
#define RCUTILS_LOG_MIN_SEVERITY_NONE 5
#define RCUTILS_LOG_MIN_SEVERITY_SUCCESS 2

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will not do this because those are a packed sequential index (DEBUG=0, INFO=1, WARN=2, …), not the enum, and they're compile-time definitions used for compile-time log stripping. inserting SUCCESS renumbers WARN 2→3, ERROR 3→4, etc. that's a silent break across translation units or packages built at different times which is arguably worse than a clean ABI break because it fails quietly.

#define RCUTILS_LOG_MIN_SEVERITY_WARN 3
#define RCUTILS_LOG_MIN_SEVERITY_ERROR 4
#define RCUTILS_LOG_MIN_SEVERITY_FATAL 5
#define RCUTILS_LOG_MIN_SEVERITY_NONE 6

/**
* \def RCUTILS_LOG_MIN_SEVERITY
Expand Down Expand Up @@ -541,6 +542,123 @@ extern "C"
__VA_ARGS__)
#endif

#if (RCUTILS_LOG_MIN_SEVERITY > RCUTILS_LOG_MIN_SEVERITY_INFO)
// empty logging macros for severity SUCCESS when disabled at compile time
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS(format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_NAMED(name, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_ONCE(format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_ONCE_NAMED(name, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_EXPRESSION(expression, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_EXPRESSION_NAMED(expression, name, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_FUNCTION(function, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_FUNCTION_NAMED(function, name, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_SKIPFIRST(format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_SKIPFIRST_NAMED(name, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_THROTTLE(get_time_point, duration, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_SKIPFIRST_THROTTLE(get_time_point, duration, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
# define RCUTILS_LOG_SUCCESS_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
#else
/**
* \def RCUTILS_LOG_SUCCESS
* Log a message with severity SUCCESS.
* \copydoc RCUTILS_LOG
*/
# define RCUTILS_LOG_SUCCESS(...) RCUTILS_LOG(RCUTILS_LOG_SEVERITY_SUCCESS, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_NAMED
* \copydoc RCUTILS_LOG_NAMED
*/
# define RCUTILS_LOG_SUCCESS_NAMED(name, ...) \
RCUTILS_LOG_NAMED(RCUTILS_LOG_SEVERITY_SUCCESS, name, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_ONCE
* \copydoc RCUTILS_LOG_ONCE
*/
# define RCUTILS_LOG_SUCCESS_ONCE(...) RCUTILS_LOG_ONCE(RCUTILS_LOG_SEVERITY_SUCCESS, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_ONCE_NAMED
* \copydoc RCUTILS_LOG_ONCE_NAMED
*/
# define RCUTILS_LOG_SUCCESS_ONCE_NAMED(name, ...) \
RCUTILS_LOG_ONCE_NAMED(RCUTILS_LOG_SEVERITY_SUCCESS, name, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_EXPRESSION
* \copydoc RCUTILS_LOG_EXPRESSION
*/
# define RCUTILS_LOG_SUCCESS_EXPRESSION(expression, ...) \
RCUTILS_LOG_EXPRESSION(RCUTILS_LOG_SEVERITY_SUCCESS, expression, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_EXPRESSION_NAMED
* \copydoc RCUTILS_LOG_EXPRESSION_NAMED
*/
# define RCUTILS_LOG_SUCCESS_EXPRESSION_NAMED(expression, name, ...) \
RCUTILS_LOG_EXPRESSION_NAMED(RCUTILS_LOG_SEVERITY_SUCCESS, expression, name, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_FUNCTION
* \copydoc RCUTILS_LOG_FUNCTION
*/
# define RCUTILS_LOG_SUCCESS_FUNCTION(function, ...) \
RCUTILS_LOG_FUNCTION(RCUTILS_LOG_SEVERITY_SUCCESS, function, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_FUNCTION_NAMED
* \copydoc RCUTILS_LOG_FUNCTION_NAMED
*/
# define RCUTILS_LOG_SUCCESS_FUNCTION_NAMED(function, name, ...) \
RCUTILS_LOG_FUNCTION_NAMED(RCUTILS_LOG_SEVERITY_SUCCESS, function, name, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_SKIPFIRST
* \copydoc RCUTILS_LOG_SKIPFIRST
*/
# define RCUTILS_LOG_SUCCESS_SKIPFIRST(...) \
RCUTILS_LOG_SKIPFIRST(RCUTILS_LOG_SEVERITY_SUCCESS, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_SKIPFIRST_NAMED
* \copydoc RCUTILS_LOG_SKIPFIRST_NAMED
*/
# define RCUTILS_LOG_SUCCESS_SKIPFIRST_NAMED(name, ...) \
RCUTILS_LOG_SKIPFIRST_NAMED(RCUTILS_LOG_SEVERITY_SUCCESS, name, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_THROTTLE
* \copydoc RCUTILS_LOG_THROTTLE
*/
# define RCUTILS_LOG_SUCCESS_THROTTLE(get_time_point, duration, ...) \
RCUTILS_LOG_THROTTLE(RCUTILS_LOG_SEVERITY_SUCCESS, get_time_point, duration, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_THROTTLE_NAMED
* \copydoc RCUTILS_LOG_THROTTLE_NAMED
*/
# define RCUTILS_LOG_SUCCESS_THROTTLE_NAMED(get_time_point, duration, name, ...) \
RCUTILS_LOG_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_SUCCESS, get_time_point, duration, name, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_SKIPFIRST_THROTTLE
* \copydoc RCUTILS_LOG_SKIPFIRST_THROTTLE
*/
# define RCUTILS_LOG_SUCCESS_SKIPFIRST_THROTTLE(get_time_point, duration, ...) \
RCUTILS_LOG_SKIPFIRST_THROTTLE(RCUTILS_LOG_SEVERITY_SUCCESS, get_time_point, duration, __VA_ARGS__)
/**
* \def RCUTILS_LOG_SUCCESS_SKIPFIRST_THROTTLE_NAMED
* \copydoc RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED
*/
# define RCUTILS_LOG_SUCCESS_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, ...) \
RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_SUCCESS, get_time_point, duration, \
name, __VA_ARGS__)
#endif

#if (RCUTILS_LOG_MIN_SEVERITY > RCUTILS_LOG_MIN_SEVERITY_WARN)
// empty logging macros for severity WARN when disabled at compile time
/// Empty logging macro due to the preprocessor definition of RCUTILS_LOG_MIN_SEVERITY.
Expand Down
1 change: 1 addition & 0 deletions src/logging.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ const char * const g_rcutils_log_severity_names[] = {
[RCUTILS_LOG_SEVERITY_UNSET] = "UNSET",
[RCUTILS_LOG_SEVERITY_DEBUG] = "DEBUG",
[RCUTILS_LOG_SEVERITY_INFO] = "INFO",
[RCUTILS_LOG_SEVERITY_SUCCESS] = "SUCCESS",
[RCUTILS_LOG_SEVERITY_WARN] = "WARN",
[RCUTILS_LOG_SEVERITY_ERROR] = "ERROR",
[RCUTILS_LOG_SEVERITY_FATAL] = "FATAL",
Expand Down