server: logging-backend selection via command line. 51/47051/12
authorMaciej J. Karpiuk <m.karpiuk2@samsung.com>
Fri, 28 Aug 2015 13:39:41 +0000 (15:39 +0200)
committerMaciej J. Karpiuk <m.karpiuk2@samsung.com>
Thu, 3 Sep 2015 05:49:37 +0000 (07:49 +0200)
[Feature]       command-line option to select logging backend
[Cause]         logging backend selected in compile-time, no flexibility
[Solution]      add command-line option, select backend in runtime
[Verification]  start service with different logging options.

Change-Id: I410457521462b29d4c40995b37bbd8ea06e479b4

server/main.cpp
zone-daemon/main.cpp

index 7ed4ef1..af30cd2 100644 (file)
@@ -58,8 +58,12 @@ const std::string CONFIG_PATH = "/etc/vasum/daemon.conf";
 int main(int argc, char* argv[])
 {
     bool runAsRoot = false;
-
     try {
+#ifndef NDEBUG
+        const char *defaultLoggingBackend = "stderr";
+#else
+        const char *defaultLoggingBackend = "syslog";
+#endif
         po::options_description desc("Allowed options");
 
         desc.add_options()
@@ -67,6 +71,12 @@ int main(int argc, char* argv[])
         ("root,r", "Don't drop root privileges at startup")
         ("daemon,d", "Run server as daemon")
         ("log-level,l", po::value<std::string>()->default_value("DEBUG"), "set log level")
+        ("log-backend,b", po::value<std::string>()->default_value(defaultLoggingBackend),
+                          "set log backend [stderr,syslog"
+#ifdef HAVE_SYSTEMD
+                          ",journal"
+#endif
+                          "]")
         ("check,c", "check runtime environment and exit")
         ("version,v", "show application version")
         ;
@@ -113,13 +123,22 @@ int main(int argc, char* argv[])
         }
 
         Logger::setLogLevel(vm["log-level"].as<std::string>());
-#if !defined(NDEBUG)
-        Logger::setLogBackend(new StderrBackend());
-#elif HAVE_SYSTEMD
-        Logger::setLogBackend(new SystemdJournalBackend());
-#else
-        Logger::setLogBackend(new SyslogBackend());
+        const std::string logBackend = vm["log-backend"].as<std::string>();
+        if(logBackend.compare("stderr") == 0) {
+            Logger::setLogBackend(new StderrBackend());
+        }
+#ifdef HAVE_SYSTEMD
+        else if(logBackend.compare("journal") == 0) {
+            Logger::setLogBackend(new SystemdJournalBackend());
+        }
 #endif
+        else if(logBackend.compare("syslog") == 0) {
+            Logger::setLogBackend(new SyslogBackend());
+        }
+        else {
+            std::cerr << "Error: unrecognized logging backend option: " << logBackend << std::endl;
+            return 1;
+        }
 
         runAsRoot = vm.count("root") > 0;
 
@@ -149,4 +168,3 @@ int main(int argc, char* argv[])
 
     return 0;
 }
-
index 1bb3091..82b152e 100644 (file)
@@ -55,12 +55,24 @@ const std::string PROGRAM_NAME_AND_VERSION =
 int main(int argc, char* argv[])
 {
     try {
+#ifndef NDEBUG
+        const char *defaultLoggingBackend = "stderr";
+#else
+        const char *defaultLoggingBackend = "syslog";
+#endif
+
         po::options_description desc("Allowed options");
 
         desc.add_options()
         ("help,h", "print this help")
         ("daemon,d", "Run server as daemon")
         ("log-level,l", po::value<std::string>()->default_value("DEBUG"), "set log level")
+        ("log-backend,b", po::value<std::string>()->default_value(defaultLoggingBackend),
+                          "set log backend [stderr,syslog"
+#ifdef HAVE_SYSTEMD
+                          ",journal"
+#endif
+                          "]")
         ("version,v", "show application version")
         ;
 
@@ -103,13 +115,22 @@ int main(int argc, char* argv[])
         }
 
         Logger::setLogLevel(vm["log-level"].as<std::string>());
-#if !defined(NDEBUG)
-        Logger::setLogBackend(new StderrBackend());
-#elif HAVE_SYSTEMD
-        Logger::setLogBackend(new SystemdJournalBackend());
-#else
-        Logger::setLogBackend(new SyslogBackend());
+        const std::string logBackend = vm["log-backend"].as<std::string>();
+        if(logBackend.compare("stderr") == 0) {
+            Logger::setLogBackend(new StderrBackend());
+        }
+#ifdef HAVE_SYSTEMD
+        else if(logBackend.compare("journal") == 0) {
+            Logger::setLogBackend(new SystemdJournalBackend());
+        }
 #endif
+        else if(logBackend.compare("syslog") == 0) {
+            Logger::setLogBackend(new SyslogBackend());
+        }
+        else {
+            std::cerr << "Error: unrecognized logging backend option: " << logBackend << std::endl;
+            return 1;
+        }
 
     } catch (std::exception& e) {
         std::cerr << e.what() << std::endl;
@@ -127,4 +148,3 @@ int main(int argc, char* argv[])
 
     return 0;
 }
-