From: Tobias Brunner Date: Tue, 21 Jul 2020 13:57:12 +0000 (+0200) Subject: sys-logger: Optionally log the level of each message X-Git-Tag: 5.9.1rc1~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b422f16d1057f4f121ed923fc557855e4a080597;p=thirdparty%2Fstrongswan.git sys-logger: Optionally log the level of each message Fixes #3509. --- diff --git a/conf/options/charon-logging.opt b/conf/options/charon-logging.opt index 71f3a460bd..31c46ad358 100644 --- a/conf/options/charon-logging.opt +++ b/conf/options/charon-logging.opt @@ -67,3 +67,6 @@ charon.syslog.. = charon.syslog..ike_name = no Prefix each log entry with the connection name and a unique numerical identifier for each IKE_SA. + +charon.syslog..log_level = no + Add the log level of each message after the subsystem (e.g. [IKE2]). diff --git a/src/libcharon/bus/listeners/sys_logger.c b/src/libcharon/bus/listeners/sys_logger.c index a3968a7f93..017fc4b9b0 100644 --- a/src/libcharon/bus/listeners/sys_logger.c +++ b/src/libcharon/bus/listeners/sys_logger.c @@ -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); } diff --git a/src/libcharon/bus/listeners/sys_logger.h b/src/libcharon/bus/listeners/sys_logger.h index 28afe05ee9..027af9d2fe 100644 --- a/src/libcharon/bus/listeners/sys_logger.h +++ b/src/libcharon/bus/listeners/sys_logger.h @@ -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. diff --git a/src/libcharon/daemon.c b/src/libcharon/daemon.c index 0b5bc3ec7a..ef66d8bf97 100644 --- a/src/libcharon/daemon.c +++ b/src/libcharon/daemon.c @@ -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);