From e1b51bda18d07cbe80f93441f97f3fd93bc711d6 Mon Sep 17 00:00:00 2001 From: Martin Piatka Date: Thu, 28 Jul 2022 15:01:22 +0200 Subject: [PATCH] logging: separate config parsing from setting log level --- src/debug.cpp | 16 +++++++++------- src/debug.h | 5 +++-- src/host.cpp | 14 +++++++++----- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 0dd717467..0a625c989 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -207,12 +207,14 @@ void debug_dump(void *lp, int len) } } -bool set_log_level(const char *optarg, - bool *logger_repeat_msgs, +bool parse_log_cfg(const char *optarg, + int *log_lvl, + bool *logger_skip_repeats, log_timestamp_mode *show_timestamps) { assert(optarg != nullptr); - assert(logger_repeat_msgs != nullptr); + assert(log_lvl != nullptr); + assert(logger_skip_repeats != nullptr); assert(show_timestamps != nullptr); using namespace std::string_literals; @@ -243,7 +245,7 @@ bool set_log_level(const char *optarg, } if (strstr(optarg, "+repeat") != nullptr) { - *logger_repeat_msgs = true; + *logger_skip_repeats = false; } if (const char *timestamps = strstr(optarg, "timestamps")) { @@ -256,7 +258,7 @@ bool set_log_level(const char *optarg, } if (getenv("ULTRAGRID_VERBOSE") != nullptr) { - log_level = LOG_LEVEL_VERBOSE; + *log_lvl = LOG_LEVEL_VERBOSE; } if (optarg[0] == '+' || optarg[0] == '-') { // only flags, no log level @@ -269,7 +271,7 @@ bool set_log_level(const char *optarg, clog << "Log: wrong value: " << optarg << " (allowed range [0.." << LOG_LEVEL_MAX << "])\n"; return false; } - log_level = val; + *log_lvl = val; return true; } @@ -279,7 +281,7 @@ bool set_log_level(const char *optarg, } for (auto m : mapping) { if (strcmp(log_level_str, m.name) == 0) { - log_level = m.level; + *log_lvl = m.level; return true; } } diff --git a/src/debug.h b/src/debug.h index 3cacbfaea..d10e2b6d9 100644 --- a/src/debug.h +++ b/src/debug.h @@ -94,8 +94,9 @@ void log_msg(int log_level, const char *format, ...) ATTRIBUTE(format (printf, 2 void log_msg_once(int log_level, uint32_t id, const char *msg); void log_perror(int log_level, const char *msg); -bool set_log_level(const char *optarg, - bool *logger_repeat_msgs, +bool parse_log_cfg(const char *conf_str, + int *log_lvl, + bool *logger_skip_repeats, enum log_timestamp_mode *show_timestamps); #ifdef __cplusplus diff --git a/src/host.cpp b/src/host.cpp index f06af984e..a51a5202f 100644 --- a/src/host.cpp +++ b/src/host.cpp @@ -294,6 +294,11 @@ static bool parse_opts_set_logging(int argc, char *argv[]) // modified getopt - process all "argv[0] argv[n]" pairs to avoid permutation // of argv arguments - we do not have the whole option set in optstring, so it // would put optargs to the end ("uv -t testcard -V" -> "uv -t -V testcard") + + int logging_lvl = LOG_LEVEL_INFO; + bool logger_skip_repeats = true; + log_timestamp_mode logger_show_timestamps = LOG_TIMESTAMP_AUTO; + for (int i = 1; i < argc; ++i) { char *my_argv[] = { argv[0], argv[i] }; @@ -305,7 +310,7 @@ static bool parse_opts_set_logging(int argc, char *argv[]) if (optarg) { log_opt = optarg; } else { - log_level += 1; + logging_lvl += 1; } break; case OPT_PARAM: @@ -325,12 +330,11 @@ static bool parse_opts_set_logging(int argc, char *argv[]) } opterr = saved_opterr; - bool logger_repeat_msgs = false; - log_timestamp_mode logger_show_timestamps = LOG_TIMESTAMP_AUTO; - if (log_opt != nullptr && !set_log_level(log_opt, &logger_repeat_msgs, &logger_show_timestamps)) { + if (log_opt != nullptr && !parse_log_cfg(log_opt, &logging_lvl, &logger_skip_repeats, &logger_show_timestamps)) { return false; } - Logger::preinit(!logger_repeat_msgs, logger_show_timestamps); + log_level = logging_lvl; + Logger::preinit(logger_skip_repeats, logger_show_timestamps); return true; }