The server can start with the verbosity level flag

This is useful when the server restarts. The restart handler
may be faciliated by the new selector flags, --verbosity.

Bug: 282081852
Test: cvd --verbosity=DEBUG reset -y
Test: cvd --verbosity=DEBUG version
Test: cvd --verbosity=DEBUG
Test: cvd --verbosity=DEBUG --help
Test: cvd --verbosity=DEBUG --disable_default_group=true start
Change-Id: I733a2f7d06e0eff8ec40453ae1bc40eff409a60a
diff --git a/host/commands/cvd/main.cc b/host/commands/cvd/main.cc
index c323f99..b7069bb 100644
--- a/host/commands/cvd/main.cc
+++ b/host/commands/cvd/main.cc
@@ -209,6 +209,7 @@
          .carryover_client_fd = parsed.carryover_client_fd,
          .memory_carryover_fd = parsed.memory_carryover_fd,
          .carryover_stderr_fd = parsed.carryover_stderr_fd,
+         .verbosity_level = parsed.verbosity_level,
          .acloud_translator_optout = parsed.acloud_translator_optout});
   }
 
diff --git a/host/commands/cvd/run_server.cpp b/host/commands/cvd/run_server.cpp
index b2fd379..932f8a2 100644
--- a/host/commands/cvd/run_server.cpp
+++ b/host/commands/cvd/run_server.cpp
@@ -42,8 +42,17 @@
 
   std::unique_ptr<ServerLogger::ScopedLogger> scoped_logger;
   if (params.carryover_stderr_fd->IsOpen()) {
-    scoped_logger = std::make_unique<ServerLogger::ScopedLogger>(std::move(
-        CF_EXPECT(server_logger->LogThreadToFd(params.carryover_stderr_fd))));
+    const auto& verbosity_level = params.verbosity_level;
+    if (!EncodeVerbosity(verbosity_level).ok()) {
+      LOG(ERROR) << "Failed to set verbosity level \"" << verbosity_level
+                 << "\"";
+      scoped_logger = std::make_unique<ServerLogger::ScopedLogger>(std::move(
+          CF_EXPECT(server_logger->LogThreadToFd(params.carryover_stderr_fd))));
+    } else {
+      scoped_logger = std::make_unique<ServerLogger::ScopedLogger>(
+          std::move(CF_EXPECT(server_logger->LogThreadToFd(
+              params.carryover_stderr_fd, verbosity_level))));
+    }
   }
   if (params.memory_carryover_fd && !(*params.memory_carryover_fd)->IsOpen()) {
     LOG(ERROR) << "Memory carryover file is supposed to be open but is not.";
@@ -71,6 +80,10 @@
   SharedFD memory_carryover_fd;
   flags.emplace_back(
       SharedFDFlag("INTERNAL_memory_carryover_fd", memory_carryover_fd));
+  // the server's default verbosity must be VERBOSE, the least LogSeverity
+  // the LogSeverity control will be done later on by the server by masking
+  std::string verbosity = "VERBOSE";
+  flags.emplace_back(GflagsCompatFlag("verbosity", verbosity));
   CF_EXPECT(ParseFlags(flags, all_args));
 
   // now the three flags above are all consumed from all_args
@@ -96,6 +109,7 @@
       .memory_carryover_fd = memory_carryover_fd_opt,
       .carryover_stderr_fd = carryover_stderr_fd,
       .acloud_translator_optout = acloud_translator_optout_opt,
+      .verbosity_level = verbosity,
   };
   return {result};
 }
diff --git a/host/commands/cvd/run_server.h b/host/commands/cvd/run_server.h
index dbd48d3..0933e01 100644
--- a/host/commands/cvd/run_server.h
+++ b/host/commands/cvd/run_server.h
@@ -42,6 +42,7 @@
    *
    */
   SharedFD carryover_stderr_fd;
+  std::string verbosity_level;
   std::optional<bool> acloud_translator_optout;
 };
 Result<void> RunServer(const RunServerParam& params);
@@ -52,6 +53,7 @@
   std::optional<SharedFD> memory_carryover_fd;
   SharedFD carryover_stderr_fd;
   std::optional<bool> acloud_translator_optout;
+  std::string verbosity_level;
 };
 Result<ParseResult> ParseIfServer(cvd_common::Args& all_args);
 
diff --git a/host/commands/cvd/server_command/restart.cpp b/host/commands/cvd/server_command/restart.cpp
index 3116be3..c82cfdd 100644
--- a/host/commands/cvd/server_command/restart.cpp
+++ b/host/commands/cvd/server_command/restart.cpp
@@ -102,6 +102,12 @@
   }
 
   Result<cvd::Response> Handle(const RequestWithStdio& request) override {
+    /*
+     * TODO(weihsu@): change the code accordingly per verbosity level control.
+     *
+     * Now, the server can start with a verbosity level. Change the code
+     * accordingly.
+     */
     CF_EXPECT(CanHandle(request));
     cvd::Response response;
     if (request.Message().has_shutdown_request()) {