]> git.ipfire.org Git - people/ms/strongswan.git/commitdiff
sys-logger: Optionally log the level of each message
authorTobias Brunner <tobias@strongswan.org>
Tue, 21 Jul 2020 13:57:12 +0000 (15:57 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 27 Oct 2020 09:42:49 +0000 (10:42 +0100)
Fixes #3509.

conf/options/charon-logging.opt
src/libcharon/bus/listeners/sys_logger.c
src/libcharon/bus/listeners/sys_logger.h
src/libcharon/daemon.c

index 71f3a460bd588b8599ffe4f661ebb1653133a294..31c46ad35890c37819b17f277dd7d7d30c9c04f0 100644 (file)
@@ -67,3 +67,6 @@ charon.syslog.<facility>.<subsystem> = <default>
 charon.syslog.<facility>.ike_name = no
        Prefix each log entry with the connection name and a unique numerical
        identifier for each IKE_SA.
+
+charon.syslog.<facility>.log_level = no
+       Add the log level of each message after the subsystem (e.g. [IKE2]).
index a3968a7f93142d53b45f964cb3ea5a807be75428..017fc4b9b014a1df99d23f54e655e0d545a9ff7d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 Tobias Brunner
+ * Copyright (C) 2012-2020 Tobias Brunner
  * Copyright (C) 2006 Martin Willi
  * HSR Hochschule fuer Technik Rapperswil
  *
@@ -50,6 +50,11 @@ struct private_sys_logger_t {
         */
        bool ike_name;
 
+       /**
+        * Print the log level
+        */
+       bool log_level;
+
        /**
         * Mutex to ensure multi-line log messages are not torn apart
         */
@@ -65,13 +70,21 @@ METHOD(logger_t, log_, void,
        private_sys_logger_t *this, debug_t group, level_t level, int thread,
        ike_sa_t* ike_sa, const char *message)
 {
-       char groupstr[4], namestr[128] = "";
+       char groupstr[5], namestr[128] = "";
        const char *current = message, *next;
 
        /* cache group name and optional name string */
-       snprintf(groupstr, sizeof(groupstr), "%N", debug_names, group);
-
        this->lock->read_lock(this->lock);
+       if (this->log_level)
+       {
+               snprintf(groupstr, sizeof(groupstr), "%N%d", debug_names, group,
+                                level);
+       }
+       else
+       {
+               snprintf(groupstr, sizeof(groupstr), "%N", debug_names, group);
+       }
+
        if (this->ike_name && ike_sa)
        {
                if (ike_sa->get_peer_cfg(ike_sa))
@@ -135,10 +148,11 @@ METHOD(sys_logger_t, set_level, void,
 }
 
 METHOD(sys_logger_t, set_options, void,
-       private_sys_logger_t *this, bool ike_name)
+       private_sys_logger_t *this, bool ike_name, bool log_level)
 {
        this->lock->write_lock(this->lock);
        this->ike_name = ike_name;
+       this->log_level = log_level;
        this->lock->unlock(this->lock);
 }
 
index 28afe05ee9cedd23fae50ce623cdd08e89a1f4c6..027af9d2fe87c559411fa75d469057ab76111fa7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 Tobias Brunner
+ * Copyright (C) 2012-2020 Tobias Brunner
  * Copyright (C) 2006 Martin Willi
  * HSR Hochschule fuer Technik Rapperswil
  *
@@ -48,8 +48,9 @@ struct sys_logger_t {
         * Set options used by this logger.
         *
         * @param ike_name      TRUE to prefix the name of the IKE_SA
+        * @param log_level     TRUE to include the log level in the message
         */
-       void (*set_options) (sys_logger_t *this, bool ike_name);
+       void (*set_options) (sys_logger_t *this, bool ike_name, bool log_level);
 
        /**
         * Destroys a sys_logger_t object.
index 0b5bc3ec7a525d6ebdacf9ae73f3ac4eee6c5cc7..ef66d8bf97e13bf82c613a1741917f2f2b70606b 100644 (file)
@@ -450,6 +450,7 @@ static void load_sys_logger(private_daemon_t *this, char *facility,
        sys_logger_t *sys_logger;
        debug_t group;
        level_t def;
+       bool ike_name, log_level;
 
        if (get_syslog_facility(facility) == -1)
        {
@@ -462,9 +463,12 @@ static void load_sys_logger(private_daemon_t *this, char *facility,
                return;
        }
 
-       sys_logger->set_options(sys_logger,
-                               lib->settings->get_bool(lib->settings, "%s.syslog.%s.ike_name",
-                                                                               FALSE, lib->ns, facility));
+       ike_name = lib->settings->get_bool(lib->settings, "%s.syslog.%s.ike_name",
+                                                                          FALSE, lib->ns, facility);
+       log_level = lib->settings->get_bool(lib->settings, "%s.syslog.%s.log_level",
+                                                                          FALSE, lib->ns, facility);
+
+       sys_logger->set_options(sys_logger, ike_name, log_level);
 
        def = lib->settings->get_int(lib->settings, "%s.syslog.%s.default", 1,
                                                                 lib->ns, facility);