From ba43271df7cc83806a08d6937719544786fd331d Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 28 Sep 2025 06:04:12 +0200 Subject: [PATCH 13/13] Add '--log-level LEVEL' command line option Organization: Wires The default 'trace' log level is quite verbose for production systems. This commit changes the default to 'info' and adds a command line option to control the log level. Signed-off-by: Joachim Wiberg --- src/restconf/main.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/restconf/main.cpp b/src/restconf/main.cpp index 477e846..f253421 100644 --- a/src/restconf/main.cpp +++ b/src/restconf/main.cpp @@ -26,11 +26,12 @@ static const char usage[] = R"(Rousette - RESTCONF server Usage: - rousette [--syslog] [--timeout ] [--help] + rousette [--syslog] [--timeout ] [--log-level ] [--help] Options: -h --help Show this screen. -t --timeout Change default timeout in sysrepo (if not set, use sysrepo internal). --syslog Log to syslog. + --log-level Set log level (trace, debug, info, warn, error, critical, off) [default: info]. )"; #ifdef HAVE_SYSTEMD @@ -75,10 +76,32 @@ int main(int argc, char* argv []) { auto args = docopt::docopt(usage, {argv + 1, argv + argc}, true,""/* version */, true); auto timeout = std::chrono::milliseconds{0}; + auto logLevel = spdlog::level::info; if (args["--timeout"]) { timeout = std::chrono::milliseconds{args["--timeout"].asLong() * 1000}; } + + if (args["--log-level"]) { + auto levelStr = args["--log-level"].asString(); + if (levelStr == "trace") { + logLevel = spdlog::level::trace; + } else if (levelStr == "debug") { + logLevel = spdlog::level::debug; + } else if (levelStr == "info") { + logLevel = spdlog::level::info; + } else if (levelStr == "warn" || levelStr == "warning") { + logLevel = spdlog::level::warn; + } else if (levelStr == "error" || levelStr == "err") { + logLevel = spdlog::level::err; + } else if (levelStr == "critical") { + logLevel = spdlog::level::critical; + } else if (levelStr == "off") { + logLevel = spdlog::level::off; + } else { + throw std::runtime_error("Invalid log level: " + levelStr + ". Valid levels: trace, debug, info, warn, error, critical, off"); + } + } if (args["--syslog"].asBool()) { auto syslog_sink = std::make_shared("rousette", LOG_PID, LOG_USER, true); auto logger = std::make_shared("rousette", syslog_sink); @@ -94,7 +117,7 @@ int main(int argc, char* argv []) auto logger = std::make_shared("rousette", stdout_sink); spdlog::set_default_logger(logger); } - spdlog::set_level(spdlog::level::trace); + spdlog::set_level(logLevel); /* We will parse URIs using boost::spirit's alnum/alpha/... matchers which are locale-dependent. * Let's use something stable no matter what the system is using -- 2.43.0