From 221d374ff2b0fdce353b8d6de7177fa411e85876 Mon Sep 17 00:00:00 2001 From: Naim A Date: Sun, 7 Feb 2016 00:48:44 +0200 Subject: [PATCH] Adjustable logging level --- src/main.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 418283c..ca7aea5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,6 +23,7 @@ #include // signal #include // strlen #include +#include #include #include #include @@ -121,7 +122,7 @@ int main(int argc, char *argv[]) ("apiserver.port", boost::program_options::value()->default_value(6969), "TCP port to listen on") ("logging.filename", boost::program_options::value()->default_value("/var/log/udpt.log"), "file to write logs to") - ("logging.level", boost::program_options::value()->default_value("warning"), "log level (error/warning/info/debug)") + ("logging.level", boost::program_options::value()->default_value("warning"), "log level (fatal/error/warning/info/debug/trace)") #ifdef linux ("daemon.chdir", boost::program_options::value()->default_value("/"), "home directory for daemon") @@ -193,10 +194,29 @@ int main(int argc, char *argv[]) << " [" << boost::log::expressions::attr("Channel") << "] \t" << boost::log::expressions::smessage ); - boost::log::core::get()->add_sink(async_sink); + auto loggingCore = boost::log::core::get(); + loggingCore->add_sink(async_sink); boost::log::sources::severity_channel_logger_mt<> logger(boost::log::keywords::channel = "main"); + std::string severity = var_map["logging.level"].as(); + std::transform(severity.begin(), severity.end(), severity.begin(), std::tolower); + int severityVal = boost::log::trivial::warning; + if ("fatal" == severity) severityVal = boost::log::trivial::fatal; + else if ("error" == severity) severityVal = boost::log::trivial::error; + else if ("warning" == severity) severityVal = boost::log::trivial::warning; + else if ("info" == severity) severityVal = boost::log::trivial::info; + else if ("debug" == severity) severityVal = boost::log::trivial::debug; + else if ("trace" == severity) severityVal = boost::log::trivial::trace; + else + { + BOOST_LOG_SEV(logger, boost::log::trivial::warning) << "Unknown debug level \"" << severity << "\" defaulting to warning"; + } + + loggingCore->set_filter( + boost::log::trivial::severity >= severityVal + ); + #ifdef linux if (!var_map.count("interactive")) {