From c617503c76dcfe75e73c5f1af3dd6c17c2ca3fd4 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 28 Sep 2025 06:04:12 +0200 Subject: [PATCH 39/42] 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 | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/restconf/main.cpp b/src/restconf/main.cpp index b1e2bc6..66c782d 100644 --- a/src/restconf/main.cpp +++ b/src/restconf/main.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -27,11 +28,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 @@ -76,10 +78,34 @@ 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 { + std::cerr << "Invalid log level: " << levelStr << std::endl; + std::cerr << "Valid levels: trace, debug, info, warn, error, critical, off" << std::endl; + return 1; + } + } if (args["--syslog"].asBool()) { auto syslog_sink = std::make_shared("rousette", LOG_PID, LOG_USER, true); auto logger = std::make_shared("rousette", syslog_sink); @@ -95,7 +121,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