From 886e548ab080896da6760036f38b93ff97fd01a4 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 16 Jan 2018 01:49:37 +0100 Subject: logging: add ability to log the log-level with API and vty Log the log level string after the category name, if enabled. The default behavior remains unchanged. Change-Id: Ie6be365cfa6aeabdf115bff19bac198440c9adf1 --- src/logging.c | 17 +++++++++++++++++ src/vty/logging_vty.c | 21 +++++++++++++++++++++ 2 files changed, 38 insertions(+) (limited to 'src') diff --git a/src/logging.c b/src/logging.c index e4f3e871..80fc7d2c 100644 --- a/src/logging.c +++ b/src/logging.c @@ -353,6 +353,12 @@ static void _output(struct log_target *target, unsigned int subsys, goto err; OSMO_SNPRINTF_RET(ret, rem, offset, len); } + if (target->print_level) { + ret = snprintf(buf + offset, rem, "%s ", log_level_str(level)); + if (ret < 0) + goto err; + OSMO_SNPRINTF_RET(ret, rem, offset, len); + } if (target->print_filename) { ret = snprintf(buf + offset, rem, "<%4.4x> %s:%d ", subsys, file, line); @@ -608,6 +614,17 @@ void log_set_print_category(struct log_target *target, int print_category) target->print_category = print_category; } +/*! Enable or disable printing of the log level name. + * \param[in] target Log target to be affected + * \param[in] print_catname Enable (1) or disable (0) filenames + * + * Print the log level name in front of every log message. + */ +void log_set_print_level(struct log_target *target, int print_level) +{ + target->print_level = (bool)print_level; +} + /*! Set the global log level for a given log target * \param[in] target Log target to be affected * \param[in] log_level New global log level diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c index dc457ffc..59148225 100644 --- a/src/vty/logging_vty.c +++ b/src/vty/logging_vty.c @@ -203,6 +203,23 @@ DEFUN(logging_prnt_cat, return CMD_SUCCESS; } +DEFUN(logging_prnt_level, + logging_prnt_level_cmd, + "logging print level (0|1)", + LOGGING_STR "Log output settings\n" + "Configure log message\n" + "Don't prefix each log message\n" + "Prefix each log message with the log level name\n") +{ + struct log_target *tgt = osmo_log_vty2tgt(vty); + + if (!tgt) + return CMD_WARNING; + + log_set_print_level(tgt, atoi(argv[0])); + return CMD_SUCCESS; +} + DEFUN(logging_level, logging_level_cmd, NULL, /* cmdstr is dynamically set in logging_vty_add_cmds(). */ @@ -734,6 +751,8 @@ static int config_write_log_single(struct vty *vty, struct log_target *tgt) else vty_out(vty, " logging timestamp %u%s", tgt->print_timestamp ? 1 : 0, VTY_NEWLINE); + if (tgt->print_level) + vty_out(vty, " logging print level 1%s", VTY_NEWLINE); /* stupid old osmo logging API uses uppercase strings... */ osmo_str2lower(level_lower, log_level_str(tgt->loglevel)); @@ -783,6 +802,7 @@ void logging_vty_add_cmds() install_element_ve(&logging_prnt_timestamp_cmd); install_element_ve(&logging_prnt_ext_timestamp_cmd); install_element_ve(&logging_prnt_cat_cmd); + install_element_ve(&logging_prnt_level_cmd); install_element_ve(&logging_set_category_mask_cmd); install_element_ve(&logging_set_category_mask_old_cmd); @@ -799,6 +819,7 @@ void logging_vty_add_cmds() install_element(CFG_LOG_NODE, &logging_prnt_timestamp_cmd); install_element(CFG_LOG_NODE, &logging_prnt_ext_timestamp_cmd); install_element(CFG_LOG_NODE, &logging_prnt_cat_cmd); + install_element(CFG_LOG_NODE, &logging_prnt_level_cmd); install_element(CFG_LOG_NODE, &logging_level_cmd); install_element(CONFIG_NODE, &cfg_log_stderr_cmd); -- cgit v1.2.3