From bd7bd3947d4882bd7939e34d4565027c64524742 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 16 Jan 2018 01:52:29 +0100 Subject: logging: separate the '<000b>' subsys from filename logging Add a separate flag and API to switch the category-in-hex output: log_set_print_category_hex(). Add log_set_print_filename2() to modify only the print_filename flag. The old log_set_print_filename() function still affects both flags. Explain the rationale in the comment for log_set_print_filename(). There is no need to deprecate log_set_print_filename(); it might cause compiler warnings and break strict builds unnecessarily. Add VTY command 'logging print category-hex (0|1)'. Since there is no VTY command to switch filename output, nothing needs to be adjusted there (a command will be added in a subsequent patch). Change-Id: Iba03a2b7915853c6dccaf6c393c31405320538b4 --- src/logging.c | 48 ++++++++++++++++++++++++++++++++++++++++++------ src/vty/logging_vty.c | 19 +++++++++++++++++++ 2 files changed, 61 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/logging.c b/src/logging.c index e6e09e06..8cb34071 100644 --- a/src/logging.c +++ b/src/logging.c @@ -385,13 +385,22 @@ static void _output(struct log_target *target, unsigned int subsys, 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); + if (target->print_category_hex) { + ret = snprintf(buf + offset, rem, "<%4.4x> ", subsys); if (ret < 0) goto err; OSMO_SNPRINTF_RET(ret, rem, offset, len); } + switch (target->print_filename2) { + case LOG_FILENAME_NONE: + break; + case LOG_FILENAME_PATH: + ret = snprintf(buf + offset, rem, "%s:%d ", file, line); + if (ret < 0) + goto err; + OSMO_SNPRINTF_RET(ret, rem, offset, len); + break; + } } ret = vsnprintf(buf + offset, rem, format, ap); if (ret < 0) @@ -621,13 +630,30 @@ void log_set_print_extended_timestamp(struct log_target *target, int print_times target->print_ext_timestamp = print_timestamp; } -/*! Enable or disable printing of the filename while logging +/*! Use log_set_print_filename2() instead. + * Call log_set_print_filename2() with LOG_FILENAME_PATH or LOG_FILENAME_NONE, *as well as* call + * log_set_print_category_hex() with the argument passed to this function. This is to mirror legacy + * behavior, which combined the category in hex with the filename. For example, if the category-hex + * output were no longer affected by log_set_print_filename(), many unit tests (in libosmocore as well as + * dependent projects) would fail since they expect the category to disappear along with the filename. * \param[in] target Log target to be affected * \param[in] print_filename Enable (1) or disable (0) filenames */ void log_set_print_filename(struct log_target *target, int print_filename) { - target->print_filename = print_filename; + log_set_print_filename2(target, print_filename ? LOG_FILENAME_PATH : LOG_FILENAME_NONE); + log_set_print_category_hex(target, print_filename); +} + +/*! Enable or disable printing of the filename while logging. + * \param[in] target Log target to be affected. + * \param[in] print_filename An LOG_FILENAME_* enum value. + * LOG_FILENAME_NONE omits the source file and line information from logs. + * LOG_FILENAME_PATH prints the entire source file path as passed to LOGP macros. + */ +void log_set_print_filename2(struct log_target *target, enum log_filename_type lft) +{ + target->print_filename2 = lft; } /*! Enable or disable printing of the category name @@ -641,6 +667,15 @@ void log_set_print_category(struct log_target *target, int print_category) target->print_category = print_category; } +/*! Enable or disable printing of the category number in hex ('<000b>'). + * \param[in] target Log target to be affected. + * \param[in] print_category_hex Enable (1) or disable (0) hex category. + */ +void log_set_print_category_hex(struct log_target *target, int print_category_hex) +{ + target->print_category_hex = print_category_hex; +} + /*! 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 @@ -723,7 +758,8 @@ struct log_target *log_target_create(void) /* global settings */ target->use_color = 1; target->print_timestamp = 0; - target->print_filename = 1; + target->print_filename2 = LOG_FILENAME_PATH; + target->print_category_hex = true; /* global log level */ target->loglevel = 0; diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c index 59148225..fd76d043 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_cat_hex, + logging_prnt_cat_hex_cmd, + "logging print category-hex (0|1)", + LOGGING_STR "Log output settings\n" + "Configure log message\n" + "Don't prefix each log message\n" + "Prefix each log message with category/subsystem nr in hex ('<000b>')\n") +{ + struct log_target *tgt = osmo_log_vty2tgt(vty); + + if (!tgt) + return CMD_WARNING; + + log_set_print_category_hex(tgt, atoi(argv[0])); + return CMD_SUCCESS; +} + DEFUN(logging_prnt_level, logging_prnt_level_cmd, "logging print level (0|1)", @@ -802,6 +819,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_cat_hex_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); @@ -819,6 +837,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_cat_hex_cmd); install_element(CFG_LOG_NODE, &logging_prnt_level_cmd); install_element(CFG_LOG_NODE, &logging_level_cmd); -- cgit v1.2.3