Skip to content

Commit 45c15c2

Browse files
authored
Prevent default logger's level from being unset (#106)
Otherwise getting the _effective_ level of a logger can return unset
1 parent 37355be commit 45c15c2

3 files changed

Lines changed: 22 additions & 4 deletions

File tree

include/rcutils/logging.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ extern "C"
3232
#define RCUTILS_LOGGING_SEPARATOR_CHAR '.'
3333
#define RCUTILS_LOGGING_SEPARATOR_STRING "."
3434

35+
/**
36+
* \def RCUTILS_DEFAULT_LOGGER_DEFAULT_LEVEL
37+
* \brief The default severity level of the default logger.
38+
*/
39+
#define RCUTILS_DEFAULT_LOGGER_DEFAULT_LEVEL RCUTILS_LOG_SEVERITY_INFO
40+
3541
/// The flag if the logging system has been initialized.
3642
RCUTILS_PUBLIC
3743
extern bool g_rcutils_logging_initialized;
@@ -237,6 +243,10 @@ int rcutils_logging_get_default_logger_level();
237243

238244
/// Set the default severity level for loggers.
239245
/**
246+
* If the severity level requested is `RCUTILS_LOG_SEVERITY_UNSET`, the default
247+
* value for the default logger (`RCUTILS_DEFAULT_LOGGER_DEFAULT_LEVEL`)
248+
* will be restored instead.
249+
*
240250
* <hr>
241251
* Attribute | Adherence
242252
* ------------------ | -------------

src/logging.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ rcutils_ret_t rcutils_logging_initialize_with_allocator(rcutils_allocator_t allo
9595
g_rcutils_logging_allocator = allocator;
9696

9797
g_rcutils_logging_output_handler = &rcutils_logging_console_output_handler;
98-
g_rcutils_logging_default_logger_level = RCUTILS_LOG_SEVERITY_INFO;
98+
g_rcutils_logging_default_logger_level = RCUTILS_DEFAULT_LOGGER_DEFAULT_LEVEL;
9999

100100
// Check for the environment variable for custom output formatting
101101
const char * output_format;
@@ -184,6 +184,10 @@ void rcutils_logging_set_default_logger_level(int level)
184184
{
185185
// *INDENT-OFF* (prevent uncrustify from making unnecessary indents here)
186186
RCUTILS_LOGGING_AUTOINIT
187+
if (RCUTILS_LOG_SEVERITY_UNSET == level) {
188+
// Restore the default
189+
level = RCUTILS_DEFAULT_LOGGER_DEFAULT_LEVEL;
190+
}
187191
g_rcutils_logging_default_logger_level = level;
188192
// *INDENT-ON*
189193
}

test/test_logging.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,14 @@ TEST(CLASSNAME(TestLogging, RMW_IMPLEMENTATION), test_logging) {
8989

9090
// check default level
9191
int original_level = rcutils_logging_get_default_logger_level();
92-
rcutils_logging_set_default_logger_level(RCUTILS_LOG_SEVERITY_INFO);
93-
EXPECT_EQ(RCUTILS_LOG_SEVERITY_INFO, rcutils_logging_get_default_logger_level());
94-
rcutils_log(NULL, RCUTILS_LOG_SEVERITY_DEBUG, "name2", "message %d", 22);
92+
rcutils_logging_set_default_logger_level(RCUTILS_LOG_SEVERITY_ERROR);
93+
EXPECT_EQ(RCUTILS_LOG_SEVERITY_ERROR, rcutils_logging_get_default_logger_level());
94+
rcutils_log(NULL, RCUTILS_LOG_SEVERITY_INFO, "name2", "message %d", 22);
9595
EXPECT_EQ(1u, g_log_calls);
96+
// It shouldn't be possible to set the default logger's level to UNSET.
97+
// Setting unset to the default logger should result in the default being restored.
98+
rcutils_logging_set_default_logger_level(RCUTILS_LOG_SEVERITY_UNSET);
99+
EXPECT_EQ(RCUTILS_DEFAULT_LOGGER_DEFAULT_LEVEL, rcutils_logging_get_default_logger_level());
96100

97101
// check other severity levels
98102
rcutils_log(NULL, RCUTILS_LOG_SEVERITY_INFO, "name3", "message %d", 33);

0 commit comments

Comments
 (0)