lib/util: add debug_set_forced_log_priority()
authorStefan Metzmacher <metze@samba.org>
Wed, 22 Nov 2023 16:03:30 +0000 (17:03 +0100)
committerJule Anger <janger@samba.org>
Tue, 19 Dec 2023 09:43:09 +0000 (09:43 +0000)
By default the priority for syslog/systemd is derived from
the log level of the debug message.

But for things like startup messages we want to
change the priority temporary, like this:

debug_set_forced_log_priority(DBGLVL_NOTICE);
D_ERR("Startup...\n");
debug_set_forced_log_priority(-1);

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15377

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Björn Jacke <bjacke@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit bd21a0cdefb30ef5522f81d865c03d11a182a63c)

lib/util/debug.c
lib/util/debug.h

index 0e13fa564e34d277f8063c09513f26b4e72e747c..a3266148b12b68f28585b8f792cd936562ba49b5 100644 (file)
@@ -94,6 +94,7 @@ static struct {
        char hostname[HOST_NAME_MAX+1];
        bool reopening_logs;
        bool schedule_reopen_logs;
+       int forced_log_priority;
 
        struct debug_settings settings;
        debug_callback_fn callback;
@@ -230,6 +231,10 @@ static int debug_level_to_priority(int level)
        };
        int priority;
 
+       if (state.forced_log_priority != -1) {
+               level = state.forced_log_priority;
+       }
+
        if (level < 0 || (size_t)level >= ARRAY_SIZE(priority_map))
                priority = LOG_DEBUG;
        else
@@ -1133,6 +1138,11 @@ void debug_set_hostname(const char *name)
        strlcpy(state.hostname, name, sizeof(state.hostname));
 }
 
+void debug_set_forced_log_priority(int forced_log_priority)
+{
+       state.forced_log_priority = forced_log_priority;
+}
+
 /**
  * Ensure debug logs are initialised.
  *
index 5433a585ec89b0f0c7105ccf395d2916858a1881..b62f2d19bcc27de51d0738d01d5c17a3146a26a1 100644 (file)
@@ -356,6 +356,7 @@ void debug_set_settings(struct debug_settings *settings,
                        const char *logging_param,
                        int syslog_level, bool syslog_only);
 void debug_set_hostname(const char *name);
+void debug_set_forced_log_priority(int forced_log_priority);
 bool reopen_logs_internal( void );
 void force_check_log_size( void );
 bool need_to_check_log_size( void );