This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgHello Jenkins Builder, Holger Freyther, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/1582 to look at the new patch set (#3). vty: fix "everything" logging option * clarify use of unused parameters * change internal static function int check_log_to_target() to more appropriate bool log_to_target() * add explicit level for "logging level ... everything" so it really logs everything instead of nothing for a given category * fix "logging level all everything" with explicit global loglevel check Fixes: OS#71 Change-Id: Ib51987fb2f64a70fca130f3799dc8fd71cc7085c --- M include/osmocom/core/logging.h M include/osmocom/vty/logging.h M src/logging.c M src/vty/logging_vty.c M tests/vty/vty_test.c 5 files changed, 34 insertions(+), 17 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/82/1582/3 diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h index fcf77f0..aef145d 100644 --- a/include/osmocom/core/logging.h +++ b/include/osmocom/core/logging.h @@ -88,6 +88,8 @@ #define LOGL_NOTICE 5 /*!< \brief abnormal/unexpected condition */ #define LOGL_ERROR 7 /*!< \brief error condition, requires user action */ #define LOGL_FATAL 8 /*!< \brief fatal, program aborted */ +/* N. B: check that you do not clash with internal LOGL_EVERY from logging.c + before adding anything to above */ #define LOG_FILTER_ALL 0x0001 @@ -299,8 +301,8 @@ void log_del_target(struct log_target *target); /* Generate command string for VTY use */ -const char *log_vty_command_string(const struct log_info *info); -const char *log_vty_command_description(const struct log_info *info); +const char *log_vty_command_string(const struct log_info *unused_info); +const char *log_vty_command_description(const struct log_info *unused_info); struct log_target *log_target_find(int type, const char *fname); extern struct llist_head osmo_log_target_list; diff --git a/include/osmocom/vty/logging.h b/include/osmocom/vty/logging.h index 9e4b98f..a23a1ad 100644 --- a/include/osmocom/vty/logging.h +++ b/include/osmocom/vty/logging.h @@ -4,6 +4,6 @@ #define FILTER_STR "Filter log messages\n" struct log_info; -void logging_vty_add_cmds(const struct log_info *cat); +void logging_vty_add_cmds(const struct log_info *unused_info); struct vty; struct log_target *osmo_log_vty2tgt(struct vty *vty); diff --git a/src/logging.c b/src/logging.c index 9b7d6f4..86e3c25 100644 --- a/src/logging.c +++ b/src/logging.c @@ -55,9 +55,10 @@ LLIST_HEAD(osmo_log_target_list); #define LOGLEVEL_DEFS 6 /* Number of loglevels.*/ +#define LOGL_EVERY 32 /* Special loglevel for "everything". */ static const struct value_string loglevel_strs[LOGLEVEL_DEFS+1] = { - { 0, "EVERYTHING" }, + { LOGL_EVERY, "EVERYTHING" }, { LOGL_DEBUG, "DEBUG" }, { LOGL_INFO, "INFO" }, { LOGL_NOTICE, "NOTICE" }, @@ -138,7 +139,7 @@ /*! \brief descriptive string for each log level */ /* You have to keep this in sync with the structure loglevel_strs. */ const char *loglevel_descriptions[LOGLEVEL_DEFS+1] = { - "Don't use. It doesn't log anything", + "Log everything (use with extreme care)", "Log debug messages and higher levels", "Log informational messages and higher levels", "Log noticeable messages and higher levels", @@ -159,6 +160,10 @@ */ int log_parse_level(const char *lvl) { + /* explicit check for "everything" loglevel */ + if (!strcmp(lvl, "everything")) + return LOGL_EVERY; + return get_string_value(loglevel_strs, lvl); } @@ -168,6 +173,8 @@ */ const char *log_level_str(unsigned int lvl) { + if (lvl == LOGL_EVERY) + return "everything"; return get_value_string(loglevel_strs, lvl); } @@ -352,36 +359,44 @@ return subsys; } -static inline int check_log_to_target(struct log_target *tar, int subsys, int level) +static inline bool log_to_target(struct log_target *tar, int subsys, int level) { struct log_category *category; category = &tar->categories[subsys]; + /* Check if special log level "everything" is enabled globally */ + if (tar->loglevel == LOGL_EVERY) + return true; + /* subsystem is not supposed to be logged */ if (!category->enabled) - return 0; + return false; /* Check the global log level */ if (tar->loglevel != 0 && level < tar->loglevel) - return 0; + return true; + + /* Check if special log level "everything" is enabled for category */ + if (category->loglevel == LOGL_EVERY) + return true; /* Check the category log level */ if (tar->loglevel == 0 && category->loglevel != 0 && level < category->loglevel) - return 0; + return false; /* Apply filters here... if that becomes messy we will * need to put filters in a list and each filter will * say stop, continue, output */ if ((tar->filter_map & LOG_FILTER_ALL) != 0) - return 1; + return true; if (osmo_log_info->filter_fn) return osmo_log_info->filter_fn(&log_context, tar); /* TODO: Check the filter/selector too? */ - return 1; + return true; } /*! \brief vararg version of logging function @@ -402,7 +417,7 @@ llist_for_each_entry(tar, &osmo_log_target_list, entry) { va_list bp; - if (!check_log_to_target(tar, subsys, level)) + if (!log_to_target(tar, subsys, level)) continue; /* According to the manpage, vsnprintf leaves the value of ap @@ -978,7 +993,7 @@ /* TODO: The following could/should be cached (update on config) */ llist_for_each_entry(tar, &osmo_log_target_list, entry) { - if (!check_log_to_target(tar, subsys, level)) + if (!log_to_target(tar, subsys, level)) continue; /* This might get logged (ignoring filters) */ diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c index 6004c47..1c51ec7 100644 --- a/src/vty/logging_vty.c +++ b/src/vty/logging_vty.c @@ -737,7 +737,7 @@ return 1; } -void logging_vty_add_cmds(const struct log_info *cat) +void logging_vty_add_cmds(const struct log_info *unused_info) { install_element_ve(&enable_logging_cmd); install_element_ve(&disable_logging_cmd); @@ -750,8 +750,8 @@ install_element_ve(&logging_set_category_mask_old_cmd); /* Logging level strings are generated dynamically. */ - logging_level_cmd.string = log_vty_command_string(cat); - logging_level_cmd.doc = log_vty_command_description(cat); + logging_level_cmd.string = log_vty_command_string(NULL); + logging_level_cmd.doc = log_vty_command_description(NULL); install_element_ve(&logging_level_cmd); install_element_ve(&show_logging_vty_cmd); install_element_ve(&show_alarms_cmd); diff --git a/tests/vty/vty_test.c b/tests/vty/vty_test.c index 865c93e..51a6529 100644 --- a/tests/vty/vty_test.c +++ b/tests/vty/vty_test.c @@ -318,7 +318,7 @@ vty_init(&vty_info); /* Setup VTY commands */ - logging_vty_add_cmds(&log_info); + logging_vty_add_cmds(NULL); osmo_stats_vty_add_cmds(); test_cmd_string_from_valstr(); -- To view, visit https://gerrit.osmocom.org/1582 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Ib51987fb2f64a70fca130f3799dc8fd71cc7085c Gerrit-PatchSet: 3 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev at sysmocom.de> Gerrit-Reviewer: Holger Freyther <holger at freyther.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max <msuraev at sysmocom.de>