Add -q/--quiet option for supressing console output.
authorDavin McCall <davmac@davmac.org>
Wed, 3 Jul 2019 09:50:52 +0000 (19:50 +1000)
committerDavin McCall <davmac@davmac.org>
Fri, 5 Jul 2019 08:33:19 +0000 (18:33 +1000)
doc/manpages/dinit.8
src/dinit-log.cc
src/dinit.cc
src/includes/dinit-log.h

index d8b2d53c133d302dc7f0adb4d9fa3b7e025a4d0c..91f2556ca0ac89958272ec09ee4aa4cefa0d99f6 100644 (file)
@@ -71,6 +71,10 @@ socket path.
 Run as a user. This is the opposite of \fB\-\-system\fR, and is the default if
 not invoked as the root user.
 .TP
+\fB\-q\fR, \fB\-\-quiet\fR
+Run with no output to the terminal/console. This disables service status messages
+and sets the log level for the console log to \fBNONE\fR.
+.TP
 \fB\-\-help\fR
 display this help and exit
 .TP
index 09e4e78216189b70ba1046dc4f47c21d26a57a89..fd15e224dce14ad9a5560c07ff399fe349ba4521 100644 (file)
 extern eventloop_t event_loop;
 
 static bool log_current_line[2];  // Whether the current line is being logged (for console, main log)
-loglevel_t log_level[2] = { loglevel_t::INFO, loglevel_t::WARN };
 static bool log_format_syslog[2] = { false, true };
 
 static service_set *services = nullptr;  // Reference to service set
 
+loglevel_t log_level[2] = { loglevel_t::INFO, loglevel_t::WARN };
+bool console_service_status = true;  // show service status messages to console?
+
 dasynq::time_val release_time; // time the log was released
 
 using rearm = dasynq::rearm;
@@ -121,9 +123,6 @@ class buffered_log_stream : public eventloop_t::fd_watcher_impl<buffered_log_str
 // (One for main log, one for console)
 static buffered_log_stream log_stream[2];
 
-constexpr static int DLOG_MAIN = 0; // main log facility
-constexpr static int DLOG_CONS = 1; // console
-
 void buffered_log_stream::release_console()
 {
     if (release) {
@@ -390,9 +389,11 @@ template <typename ... T> static void do_log(loglevel_t lvl, bool to_cons, T ...
 
 template <typename ... T> static void do_log_cons(T ... args) noexcept
 {
-    log_current_line[DLOG_CONS] = true;
-    log_current_line[DLOG_MAIN] = false;
-    push_to_log(DLOG_CONS, args...);
+    if (console_service_status) {
+        log_current_line[DLOG_CONS] = true;
+        log_current_line[DLOG_MAIN] = false;
+        push_to_log(DLOG_CONS, args...);
+    }
 }
 
 // Log to the main facility at NOTICE level
index d9e28369a224a41795fa0e67c9e1851889b7d9a3..5e87cccf16d90e47699b8434d20f9f28d44cda1d 100644 (file)
@@ -260,6 +260,10 @@ int dinit_main(int argc, char **argv)
                         return 1;
                     }
                 }
+                else if (strcmp(argv[i], "--quiet") == 0 || strcmp(argv[i], "-q") == 0) {
+                    console_service_status = false;
+                    log_level[DLOG_CONS] = loglevel_t::ZERO;
+                }
                 else if (strcmp(argv[i], "--help") == 0) {
                     cout << "dinit, an init with dependency management\n"
                             " --help                       display help\n"
@@ -272,6 +276,7 @@ int dinit_main(int argc, char **argv)
                             " --user, -u                   run as a user service manager\n"
                             " --socket-path <path>, -p <path>\n"
                             "                              path to control socket\n"
+                            " --quiet, -q                  disable output to standard output\n"
                             " <service-name>               start service with name <service-name>\n";
                     return 0;
                 }
index bcc3c1841fdd8c94343349984980bec73f60e44b..ccff5e77ad18c301e8a71754705d5b9426aa46bf 100644 (file)
@@ -25,8 +25,13 @@ enum class loglevel_t {
     ZERO    // log absolutely nothing
 };
 
+constexpr static int DLOG_MAIN = 0; // main log facility
+constexpr static int DLOG_CONS = 1; // console
+
 // These are defined in dinit-log.cc:
 extern loglevel_t log_level[2];
+extern bool console_service_status;  // show service status messages to console?
+
 void enable_console_log(bool do_enable) noexcept;
 void init_log(service_set *sset, bool syslog_format);
 void setup_main_log(int fd);