From 764ca7462f2d33bf73e4647ad1ce142f29539001 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 21 Jul 2021 12:52:49 +0200 Subject: [PATCH 1/5] glib-aux: add _nm_log_simple_printf() helper --- src/libnm-glib-aux/nm-logging-base.c | 42 ++++++++++++++++++++++++++++ src/libnm-glib-aux/nm-logging-base.h | 2 ++ 2 files changed, 44 insertions(+) diff --git a/src/libnm-glib-aux/nm-logging-base.c b/src/libnm-glib-aux/nm-logging-base.c index e11bd9f356..b07c62f4a2 100644 --- a/src/libnm-glib-aux/nm-logging-base.c +++ b/src/libnm-glib-aux/nm-logging-base.c @@ -6,6 +6,8 @@ #include +#include "nm-time-utils.h" + /*****************************************************************************/ const LogLevelDesc nm_log_level_desc[_LOGL_N] = { @@ -77,3 +79,43 @@ _nm_log_parse_level(const char *level, NMLogLevel *out_level) return FALSE; } + +void +_nm_log_simple_printf(NMLogLevel level, const char *fmt, ...) +{ + gs_free char *msg = NULL; + va_list ap; + const char * level_str; + gint64 ts; + + va_start(ap, fmt); + msg = g_strdup_vprintf(fmt, ap); + va_end(ap); + + switch (level) { + case LOGL_TRACE: + level_str = ""; + break; + case LOGL_DEBUG: + level_str = ""; + break; + case LOGL_INFO: + level_str = " "; + break; + case LOGL_WARN: + level_str = " "; + break; + default: + nm_assert(level == LOGL_ERR); + level_str = ""; + break; + } + + ts = nm_utils_clock_gettime_nsec(CLOCK_BOOTTIME); + + g_print("[%" G_GINT64_FORMAT ".%05" G_GINT64_FORMAT "] %s %s\n", + ts / NM_UTILS_NSEC_PER_SEC, + (ts / (NM_UTILS_NSEC_PER_SEC / 10000)) % 10000, + level_str, + msg); +} diff --git a/src/libnm-glib-aux/nm-logging-base.h b/src/libnm-glib-aux/nm-logging-base.h index 136f0c0425..538e85236c 100644 --- a/src/libnm-glib-aux/nm-logging-base.h +++ b/src/libnm-glib-aux/nm-logging-base.h @@ -25,4 +25,6 @@ extern const LogLevelDesc nm_log_level_desc[_LOGL_N]; gboolean _nm_log_parse_level(const char *level, NMLogLevel *out_level); +void _nm_log_simple_printf(NMLogLevel level, const char *fmt, ...) _nm_printf(2, 3); + #endif /* __NM_LOGGING_BASE_H__ */ From 391d714b19d7108cc7bece12f0e0ab3c6f143c3a Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 21 Jul 2021 12:55:39 +0200 Subject: [PATCH 2/5] cloud-setup: use _nm_log_simple_printf() for plain logging --- src/nm-cloud-setup/nm-cloud-setup-utils.c | 40 ----------------------- src/nm-cloud-setup/nm-cloud-setup-utils.h | 6 ++-- 2 files changed, 2 insertions(+), 44 deletions(-) diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.c b/src/nm-cloud-setup/nm-cloud-setup-utils.c index ed36b4dd2f..9157ce8855 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.c +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.c @@ -28,46 +28,6 @@ _nm_logging_enabled_init(const char *level_str) _nm_logging_configured_level = level; } -void -_nm_log_impl_cs(NMLogLevel level, const char *fmt, ...) -{ - gs_free char *msg = NULL; - va_list ap; - const char * level_str; - gint64 ts; - - va_start(ap, fmt); - msg = g_strdup_vprintf(fmt, ap); - va_end(ap); - - switch (level) { - case LOGL_TRACE: - level_str = ""; - break; - case LOGL_DEBUG: - level_str = ""; - break; - case LOGL_INFO: - level_str = " "; - break; - case LOGL_WARN: - level_str = " "; - break; - default: - nm_assert(level == LOGL_ERR); - level_str = ""; - break; - } - - ts = nm_utils_clock_gettime_nsec(CLOCK_BOOTTIME); - - g_print("[%" G_GINT64_FORMAT ".%05" G_GINT64_FORMAT "] %s %s\n", - ts / NM_UTILS_NSEC_PER_SEC, - (ts / (NM_UTILS_NSEC_PER_SEC / 10000)) % 10000, - level_str, - msg); -} - void _nm_utils_monotonic_timestamp_initialized(const struct timespec *tp, gint64 offset_sec, diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.h b/src/nm-cloud-setup/nm-cloud-setup-utils.h index bb47db26d5..e980afbe40 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.h +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.h @@ -3,7 +3,7 @@ #ifndef __NM_CLOUD_SETUP_UTILS_H__ #define __NM_CLOUD_SETUP_UTILS_H__ -#include "libnm-glib-aux/nm-logging-fwd.h" +#include "libnm-glib-aux/nm-logging-base.h" /*****************************************************************************/ @@ -23,9 +23,7 @@ nm_logging_enabled(NMLogLevel level) void _nm_logging_enabled_init(const char *level_str); -void _nm_log_impl_cs(NMLogLevel level, const char *fmt, ...) _nm_printf(2, 3); - -#define _nm_log(level, ...) _nm_log_impl_cs((level), __VA_ARGS__); +#define _nm_log(level, ...) _nm_log_simple_printf((level), __VA_ARGS__); #define _NMLOG(level, ...) \ G_STMT_START \ From 32b2d150217515201b5a5576aceb3f10ea03c33f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 21 Jul 2021 12:57:47 +0200 Subject: [PATCH 3/5] cloud-setup: link with libnm-log-null --- Makefile.am | 2 ++ src/libnm-glib-aux/nm-logging-base.c | 2 ++ src/nm-cloud-setup/nm-cloud-setup-utils.c | 6 ------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Makefile.am b/Makefile.am index 0e72432039..ed08230973 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5172,6 +5172,7 @@ src_nm_cloud_setup_nm_cloud_setup_LDADD = \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la \ src/libnm-glib-aux/libnm-glib-aux.la \ + src/libnm-log-null/libnm-log-null.la \ src/libnm-std-aux/libnm-std-aux.la \ src/c-siphash/libc-siphash.la \ src/libnm-client-impl/libnm.la \ @@ -5236,6 +5237,7 @@ src_nm_cloud_setup_tests_test_cloud_setup_general_LDADD = \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la \ src/libnm-glib-aux/libnm-glib-aux.la \ + src/libnm-log-null/libnm-log-null.la \ src/libnm-std-aux/libnm-std-aux.la \ src/c-siphash/libc-siphash.la \ src/libnm-client-impl/libnm.la \ diff --git a/src/libnm-glib-aux/nm-logging-base.c b/src/libnm-glib-aux/nm-logging-base.c index b07c62f4a2..b3a2ffd614 100644 --- a/src/libnm-glib-aux/nm-logging-base.c +++ b/src/libnm-glib-aux/nm-logging-base.c @@ -80,6 +80,8 @@ _nm_log_parse_level(const char *level, NMLogLevel *out_level) return FALSE; } +/*****************************************************************************/ + void _nm_log_simple_printf(NMLogLevel level, const char *fmt, ...) { diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.c b/src/nm-cloud-setup/nm-cloud-setup-utils.c index 9157ce8855..50720ba26f 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.c +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.c @@ -28,12 +28,6 @@ _nm_logging_enabled_init(const char *level_str) _nm_logging_configured_level = level; } -void -_nm_utils_monotonic_timestamp_initialized(const struct timespec *tp, - gint64 offset_sec, - gboolean is_boottime) -{} - /*****************************************************************************/ G_LOCK_DEFINE_STATIC(_wait_for_objects_lock); From 6c030ed923815b4d2fa97c7d604c897cc4702e20 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 21 Jul 2021 13:08:56 +0200 Subject: [PATCH 4/5] glib-aux,cloud-setup: add _nm_logging_enabled*() helper API Will also be used outside of nm-cloud-setup. --- src/libnm-glib-aux/nm-logging-base.c | 17 +++++++++++++++++ src/libnm-glib-aux/nm-logging-base.h | 14 ++++++++++++++ src/nm-cloud-setup/nm-cloud-setup-utils.c | 17 ----------------- src/nm-cloud-setup/nm-cloud-setup-utils.h | 12 +----------- 4 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/libnm-glib-aux/nm-logging-base.c b/src/libnm-glib-aux/nm-logging-base.c index b3a2ffd614..b195440af9 100644 --- a/src/libnm-glib-aux/nm-logging-base.c +++ b/src/libnm-glib-aux/nm-logging-base.c @@ -82,6 +82,23 @@ _nm_log_parse_level(const char *level, NMLogLevel *out_level) /*****************************************************************************/ +volatile NMLogLevel _nm_logging_enabled_value = LOGL_TRACE; + +void +_nm_logging_enabled_init(const char *level_str) +{ + NMLogLevel level; + + if (!_nm_log_parse_level(level_str, &level)) + level = LOGL_WARN; + else if (level == _LOGL_KEEP) + level = LOGL_WARN; + + _nm_logging_enabled_value = level; +} + +/*****************************************************************************/ + void _nm_log_simple_printf(NMLogLevel level, const char *fmt, ...) { diff --git a/src/libnm-glib-aux/nm-logging-base.h b/src/libnm-glib-aux/nm-logging-base.h index 538e85236c..3d76b37861 100644 --- a/src/libnm-glib-aux/nm-logging-base.h +++ b/src/libnm-glib-aux/nm-logging-base.h @@ -25,6 +25,20 @@ extern const LogLevelDesc nm_log_level_desc[_LOGL_N]; gboolean _nm_log_parse_level(const char *level, NMLogLevel *out_level); +/*****************************************************************************/ + +extern volatile NMLogLevel _nm_logging_enabled_value; + +static inline gboolean +_nm_logging_enabled(NMLogLevel level) +{ + return level >= _nm_logging_enabled_value; +} + +void _nm_logging_enabled_init(const char *level_str); + +/*****************************************************************************/ + void _nm_log_simple_printf(NMLogLevel level, const char *fmt, ...) _nm_printf(2, 3); #endif /* __NM_LOGGING_BASE_H__ */ diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.c b/src/nm-cloud-setup/nm-cloud-setup-utils.c index 50720ba26f..206461e4d0 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.c +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.c @@ -13,23 +13,6 @@ /*****************************************************************************/ -volatile NMLogLevel _nm_logging_configured_level = LOGL_TRACE; - -void -_nm_logging_enabled_init(const char *level_str) -{ - NMLogLevel level; - - if (!_nm_log_parse_level(level_str, &level)) - level = LOGL_WARN; - else if (level == _LOGL_KEEP) - level = LOGL_WARN; - - _nm_logging_configured_level = level; -} - -/*****************************************************************************/ - G_LOCK_DEFINE_STATIC(_wait_for_objects_lock); static GSList *_wait_for_objects_list; static GSList *_wait_for_objects_iterate_loops; diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.h b/src/nm-cloud-setup/nm-cloud-setup-utils.h index e980afbe40..e1502b9525 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.h +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.h @@ -13,16 +13,6 @@ /*****************************************************************************/ -extern volatile NMLogLevel _nm_logging_configured_level; - -static inline gboolean -nm_logging_enabled(NMLogLevel level) -{ - return level >= _nm_logging_configured_level; -} - -void _nm_logging_enabled_init(const char *level_str); - #define _nm_log(level, ...) _nm_log_simple_printf((level), __VA_ARGS__); #define _NMLOG(level, ...) \ @@ -30,7 +20,7 @@ void _nm_logging_enabled_init(const char *level_str); { \ const NMLogLevel _level = (level); \ \ - if (nm_logging_enabled(_level)) { \ + if (_nm_logging_enabled(_level)) { \ _nm_log(_level, __VA_ARGS__); \ } \ } \ From 443f3487768e7ea0f9dd4ed733b544e8cf150ee8 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 21 Jul 2021 13:19:50 +0200 Subject: [PATCH 5/5] glib-aux: use nm_vsprintf_buf_or_alloc() to stack allocate logging message in _nm_log_simple_printf() Also take the timestamp first. --- src/libnm-glib-aux/nm-logging-base.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/libnm-glib-aux/nm-logging-base.c b/src/libnm-glib-aux/nm-logging-base.c index b195440af9..cc19ef15db 100644 --- a/src/libnm-glib-aux/nm-logging-base.c +++ b/src/libnm-glib-aux/nm-logging-base.c @@ -102,14 +102,15 @@ _nm_logging_enabled_init(const char *level_str) void _nm_log_simple_printf(NMLogLevel level, const char *fmt, ...) { - gs_free char *msg = NULL; - va_list ap; + gs_free char *msg_heap = NULL; + char msg_stack[700]; + const char * msg; const char * level_str; gint64 ts; - va_start(ap, fmt); - msg = g_strdup_vprintf(fmt, ap); - va_end(ap); + ts = nm_utils_clock_gettime_nsec(CLOCK_BOOTTIME); + + msg = nm_vsprintf_buf_or_alloc(fmt, fmt, msg_stack, &msg_heap, NULL); switch (level) { case LOGL_TRACE: @@ -130,8 +131,6 @@ _nm_log_simple_printf(NMLogLevel level, const char *fmt, ...) break; } - ts = nm_utils_clock_gettime_nsec(CLOCK_BOOTTIME); - g_print("[%" G_GINT64_FORMAT ".%05" G_GINT64_FORMAT "] %s %s\n", ts / NM_UTILS_NSEC_PER_SEC, (ts / (NM_UTILS_NSEC_PER_SEC / 10000)) % 10000,