You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by al...@apache.org on 2017/09/18 21:22:25 UTC

[7/7] mesos git commit: Added `logging::initialize()` to main functions that use glog.

Added `logging::initialize()` to main functions that use glog.

This change reduces the number of messages "WARNING: Logging
before InitGoogleLogging() is written to STDERR".

Review: https://reviews.apache.org/r/62037/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/387ec70e
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/387ec70e
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/387ec70e

Branch: refs/heads/master
Commit: 387ec70e2514a4b9eb55593d04046a034c532dc2
Parents: a16e1d6
Author: Armand Grillet <ag...@mesosphere.io>
Authored: Mon Sep 18 20:51:39 2017 +0200
Committer: Alexander Rukletsov <al...@apache.org>
Committed: Mon Sep 18 23:21:47 2017 +0200

----------------------------------------------------------------------
 src/checks/tcp_connect.cpp                      | 27 +++---
 src/cli/execute.cpp                             | 98 +++++++++-----------
 src/cli/resolve.cpp                             | 12 +--
 src/examples/balloon_framework.cpp              | 24 +++--
 src/examples/disk_full_framework.cpp            | 19 +++-
 src/examples/dynamic_reservation_framework.cpp  | 34 +++++--
 src/examples/long_lived_framework.cpp           | 13 ++-
 src/examples/no_executor_framework.cpp          | 38 +++++---
 src/examples/test_framework.cpp                 | 19 ++--
 src/examples/test_http_framework.cpp            | 22 +++--
 src/launcher/fetcher.cpp                        | 10 +-
 src/slave/container_loggers/logrotate.cpp       | 12 ++-
 .../containerizer/mesos/io/switchboard_main.cpp | 13 ++-
 src/tests/main.cpp                              | 46 ++++-----
 src/usage/main.cpp                              |  2 +-
 15 files changed, 240 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/checks/tcp_connect.cpp
----------------------------------------------------------------------
diff --git a/src/checks/tcp_connect.cpp b/src/checks/tcp_connect.cpp
index 3cb9077..2514f4a 100644
--- a/src/checks/tcp_connect.cpp
+++ b/src/checks/tcp_connect.cpp
@@ -116,30 +116,25 @@ int testTCPConnect(const string& ip, int port)
 
 int main(int argc, char *argv[])
 {
-#ifdef __WINDOWS__
-  if (!net::wsa_initialize()) {
-    EXIT(EXIT_FAILURE) << "WSA failed to initialize";
-  }
-#endif // __WINDOWS__
-
   Flags flags;
 
   Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
+  if (flags.help) {
+    cout << flags.usage() << endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
     return EXIT_FAILURE;
   }
 
+  // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
     cerr << warning.message << endl;
   }
 
-  if (flags.help) {
-    cout << flags.usage() << endl;
-    return EXIT_SUCCESS;
-  }
-
   if (flags.ip.isNone()) {
     cerr << flags.usage("Missing required option --ip") << endl;
     return EXIT_FAILURE;
@@ -150,11 +145,19 @@ int main(int argc, char *argv[])
     return EXIT_FAILURE;
   }
 
+#ifdef __WINDOWS__
+  if (!net::wsa_initialize()) {
+    cerr << "WSA failed to initialize" << endl;
+    return EXIT_FAILURE;
+  }
+#endif // __WINDOWS__
+
   int result = testTCPConnect(flags.ip.get(), flags.port.get());
 
 #ifdef __WINDOWS__
   if (!net::wsa_cleanup()) {
-    EXIT(EXIT_FAILURE) << "Failed to finalize the WSA socket stack";
+    cerr << "Failed to finalize the WSA socket stack" << endl;
+    return EXIT_FAILURE;
   }
 #endif // __WINDOWS__
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/cli/execute.cpp
----------------------------------------------------------------------
diff --git a/src/cli/execute.cpp b/src/cli/execute.cpp
index e844fa4..78b62a6 100644
--- a/src/cli/execute.cpp
+++ b/src/cli/execute.cpp
@@ -46,6 +46,8 @@
 
 #include "internal/devolve.hpp"
 
+#include "logging/logging.hpp"
+
 #include "v1/parse.hpp"
 
 using std::cerr;
@@ -900,11 +902,6 @@ int main(int argc, char** argv)
   // Load flags from command line only.
   Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
-  if (load.isError()) {
-    cerr << flags.usage(load.error()) << endl;
-    return EXIT_FAILURE;
-  }
-
   // TODO(marco): this should be encapsulated entirely into the
   // FlagsBase API - possibly with a 'guard' that prevents FlagsBase
   // from calling ::exit(EXIT_FAILURE) after calling usage() (which
@@ -914,25 +911,29 @@ int main(int argc, char** argv)
     return EXIT_SUCCESS;
   }
 
+  if (load.isError()) {
+    cerr << flags.usage(load.error()) << endl;
+    return EXIT_FAILURE;
+  }
+
+  mesos::internal::logging::initialize(argv[0], false);
+
   // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
     LOG(WARNING) << warning.message;
   }
 
   if (flags.task.isSome() && flags.task_group.isSome()) {
-    cerr << flags.usage(
-              "Either task or task group should be set but not both. Provide"
-              " either '--task' OR '--task_group'") << endl;
-    return EXIT_FAILURE;
+    EXIT(EXIT_FAILURE) << flags.usage(
+        "Either task or task group should be set but not both."
+        " Provide either '--task' OR '--task_group'");
   } else if (flags.task.isNone() && flags.task_group.isNone()) {
     if (flags.name.isNone()) {
-      cerr << flags.usage("Missing required option --name") << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE) << flags.usage("Missing required option --name");
     }
 
     if (flags.shell && flags.command.isNone()) {
-      cerr << flags.usage("Missing required option --command") << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE) << flags.usage("Missing required option --command");
     }
   } else {
     // Either --task or --task_group is set.
@@ -942,18 +943,16 @@ int main(int argc, char** argv)
         flags.appc_image.isSome()  ||
         flags.docker_image.isSome() ||
         flags.volumes.isSome()) {
-      cerr << flags.usage(
-                "'--name, --command, --env, --appc_image, --docker_image,"
-                " --volumes' can only be set when both '--task' and"
-                " '--task_group' are not set") << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE) << flags.usage(
+          "'--name, --command, --env, --appc_image, --docker_image,"
+          " --volumes' can only be set when both '--task'"
+          " and '--task_group' are not set");
     }
 
     if (flags.task.isSome() && flags.networks.isSome()) {
-      cerr << flags.usage(
-                "'--networks' can only be set when"
-                " '--task' is not set") << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE) << flags.usage(
+          "'--networks' can only be set when"
+          " '--task' is not set");
     }
   }
 
@@ -964,18 +963,16 @@ int main(int argc, char** argv)
              flags.content_type == mesos::APPLICATION_PROTOBUF) {
     contentType = mesos::ContentType::PROTOBUF;
   } else {
-    cerr << "Invalid content type '" << flags.content_type << "'" << endl;
-    return EXIT_FAILURE;
+    EXIT(EXIT_FAILURE) << "Invalid content type '" << flags.content_type << "'";
   }
 
   Result<string> user = os::user();
   if (!user.isSome()) {
     if (user.isError()) {
-      cerr << "Failed to get username: " << user.error() << endl;
+      EXIT(EXIT_FAILURE) << "Failed to get username: " << user.error();
     } else {
-      cerr << "No username for uid " << ::getuid() << endl;
+      EXIT(EXIT_FAILURE) << "No username for uid " << ::getuid();
     }
-    return EXIT_FAILURE;
   }
 
   Option<hashmap<string, string>> environment = None();
@@ -991,8 +988,7 @@ int main(int argc, char** argv)
   if (flags.package.isSome()) {
     Try<Owned<HDFS>> hdfs = HDFS::create(flags.hadoop);
     if (hdfs.isError()) {
-      cerr << "Failed to create HDFS client: " << hdfs.error() << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE) << "Failed to create HDFS client: " << hdfs.error();
     }
 
     // TODO(benh): If HDFS is not properly configured with
@@ -1010,30 +1006,29 @@ int main(int argc, char** argv)
     exists.await();
 
     if (!exists.isReady()) {
-      cerr << "Failed to check if file exists: "
-           << (exists.isFailed() ? exists.failure() : "discarded") << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE)
+        << "Failed to check if file exists: "
+        << (exists.isFailed() ? exists.failure() : "discarded");
     } else if (exists.get() && flags.overwrite) {
       Future<Nothing> rm = hdfs.get()->rm(path);
       rm.await();
 
       if (!rm.isReady()) {
-        cerr << "Failed to remove existing file: "
-             << (rm.isFailed() ? rm.failure() : "discarded") << endl;
-        return EXIT_FAILURE;
+        EXIT(EXIT_FAILURE)
+          << "Failed to remove existing file: "
+          << (rm.isFailed() ? rm.failure() : "discarded");
       }
     } else if (exists.get()) {
-      cerr << "File already exists (see --overwrite)" << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE) << "File already exists (see --overwrite)";
     }
 
     Future<Nothing> copy = hdfs.get()->copyFromLocal(flags.package.get(), path);
     copy.await();
 
     if (!copy.isReady()) {
-      cerr << "Failed to copy package: "
-           << (copy.isFailed() ? copy.failure() : "discarded") << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE)
+        << "Failed to copy package: "
+        << (copy.isFailed() ? copy.failure() : "discarded");
     }
 
     // Now save the URI.
@@ -1051,8 +1046,8 @@ int main(int argc, char** argv)
   }
 
   if (appcImage.isSome() && dockerImage.isSome()) {
-    cerr << "Flags '--docker-image' and '--appc-image' are both set" << endl;
-    return EXIT_FAILURE;
+    EXIT(EXIT_FAILURE)
+      << "Flags '--docker-image' and '--appc-image' are both set";
   }
 
   // Always enable the RESERVATION_REFINEMENT and TASK_KILLING_STATE
@@ -1073,17 +1068,15 @@ int main(int argc, char** argv)
       FrameworkInfo::Capability::Type type;
 
       if (!FrameworkInfo::Capability::Type_Parse(capability, &type)) {
-        cerr << "Flags '--framework_capabilities'"
-                " specifies an unknown capability"
-                " '" << capability << "'" << endl;
-        return EXIT_FAILURE;
+        EXIT(EXIT_FAILURE)
+          << "Flags '--framework_capabilities' specifies an unknown"
+          << " capability '" << capability << "'";
       }
 
       if (type != FrameworkInfo::Capability::GPU_RESOURCES) {
-        cerr << "Flags '--framework_capabilities'"
-                " specifies an unsupported capability"
-                " '" << capability << "'" << endl;
-        return EXIT_FAILURE;
+        EXIT(EXIT_FAILURE)
+          << "Flags '--framework_capabilities' specifies an unsupported"
+          << " capability '" << capability << "'";
       }
 
       frameworkCapabilities.push_back(type);
@@ -1097,9 +1090,8 @@ int main(int argc, char** argv)
       ::protobuf::parse<RepeatedPtrField<Volume>>(flags.volumes.get());
 
     if (parse.isError()) {
-      cerr << "Failed to convert '--volumes' to protobuf: "
-           << parse.error() << endl;
-      return EXIT_FAILURE;
+      EXIT(EXIT_FAILURE)
+        << "Failed to convert '--volumes' to protobuf: " << parse.error();
     }
 
     vector<Volume> _volumes;

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/cli/resolve.cpp
----------------------------------------------------------------------
diff --git a/src/cli/resolve.cpp b/src/cli/resolve.cpp
index b3cba87..fe62f9f 100644
--- a/src/cli/resolve.cpp
+++ b/src/cli/resolve.cpp
@@ -70,19 +70,19 @@ int main(int argc, char** argv)
   // them from argv.
   Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
 
-  if (load.isError()) {
-    cerr << flags.usage(load.error()) << endl;
-    return EXIT_FAILURE;
-  }
-
   if (flags.help) {
     cout << flags.usage() << endl;
     return EXIT_SUCCESS;
   }
 
+  if (load.isError()) {
+    cerr << flags.usage(load.error()) << endl;
+    return EXIT_FAILURE;
+  }
+
   // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
-    LOG(WARNING) << warning.message;
+    cerr << warning.message << endl;
   }
 
   // 'master' argument must be the only argument left after parsing.

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/examples/balloon_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/balloon_framework.cpp b/src/examples/balloon_framework.cpp
index a63dbab..0136344 100644
--- a/src/examples/balloon_framework.cpp
+++ b/src/examples/balloon_framework.cpp
@@ -14,8 +14,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <glog/logging.h>
-
 #include <iostream>
 #include <string>
 #include <vector>
@@ -45,6 +43,8 @@
 
 #include "common/parse.hpp"
 
+#include "logging/logging.hpp"
+
 using namespace mesos;
 using namespace mesos::internal;
 
@@ -488,8 +488,21 @@ int main(int argc, char** argv)
   Flags flags;
   Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
+  if (flags.help) {
+    std::cout << flags.usage() << std::endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    EXIT(EXIT_FAILURE) << flags.usage(load.error());
+    std::cerr << flags.usage(load.error()) << std::endl;
+    return EXIT_FAILURE;
+  }
+
+  logging::initialize(argv[0], false);
+
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
   }
 
   const Resources resources = Resources::parse(
@@ -559,11 +572,6 @@ int main(int argc, char** argv)
 
   BalloonScheduler scheduler(framework, executor, flags);
 
-  // Log any flag warnings (after logging is initialized by the scheduler).
-  foreach (const flags::Warning& warning, load->warnings) {
-    LOG(WARNING) << warning.message;
-  }
-
   MesosSchedulerDriver* driver;
 
   // TODO(josephw): Refactor these into a common set of flags.

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/examples/disk_full_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/disk_full_framework.cpp b/src/examples/disk_full_framework.cpp
index 2572c72..28f71c3 100644
--- a/src/examples/disk_full_framework.cpp
+++ b/src/examples/disk_full_framework.cpp
@@ -14,8 +14,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <glog/logging.h>
-
 #include <string>
 #include <vector>
 
@@ -40,6 +38,8 @@
 #include <stout/os.hpp>
 #include <stout/try.hpp>
 
+#include "logging/logging.hpp"
+
 using namespace mesos;
 
 using std::string;
@@ -444,8 +444,21 @@ int main(int argc, char** argv)
   Flags flags;
   Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
+  if (flags.help) {
+    std::cout << flags.usage() << std::endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    EXIT(EXIT_FAILURE) << flags.usage(load.error());
+    std::cerr << flags.usage(load.error()) << std::endl;
+    return EXIT_FAILURE;
+  }
+
+  internal::logging::initialize(argv[0], false);
+
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
   }
 
   FrameworkInfo framework;

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/examples/dynamic_reservation_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/dynamic_reservation_framework.cpp b/src/examples/dynamic_reservation_framework.cpp
index bb6f58b..5935f2c 100644
--- a/src/examples/dynamic_reservation_framework.cpp
+++ b/src/examples/dynamic_reservation_framework.cpp
@@ -17,8 +17,6 @@
 #include <string>
 #include <vector>
 
-#include <glog/logging.h>
-
 #include <mesos/resources.hpp>
 #include <mesos/scheduler.hpp>
 #include <mesos/type_utils.hpp>
@@ -34,8 +32,13 @@
 #include <stout/stringify.hpp>
 #include <stout/try.hpp>
 
+#include "logging/logging.hpp"
+
 using namespace mesos;
 
+using std::cerr;
+using std::cout;
+using std::endl;
 using std::string;
 using std::vector;
 
@@ -363,17 +366,32 @@ int main(int argc, char** argv)
   Flags flags;
 
   Try<flags::Warnings> load = flags.load(None(), argc, argv);
+
+  if (flags.help) {
+    cout << flags.usage() << endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    EXIT(EXIT_FAILURE) << flags.usage(load.error());
-  } else if (flags.master.isNone()) {
-    EXIT(EXIT_FAILURE) << flags.usage("Missing --master");
+    cerr << flags.usage(load.error()) << endl;
+    return EXIT_FAILURE;
+  }
+
+  if (flags.master.isNone()) {
+    cerr << flags.usage("Missing --master") << endl;
+    return EXIT_FAILURE;
   } else if (flags.role.isNone()) {
-    EXIT(EXIT_FAILURE) << flags.usage("Missing --role");
+    cerr << flags.usage("Missing --role") << endl;
+    return EXIT_FAILURE;
   } else if (flags.role.get() == "*") {
-    EXIT(EXIT_FAILURE)
-      << flags.usage("Role is incorrect; the default '*' role cannot be used");
+    cerr << flags.usage(
+                "Role is incorrect; the default '*' role cannot be used")
+         << endl;
+    return EXIT_FAILURE;
   }
 
+  internal::logging::initialize(argv[0], false);
+
   // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
     LOG(WARNING) << warning.message;

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/examples/long_lived_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/long_lived_framework.cpp b/src/examples/long_lived_framework.cpp
index da63204..4304972 100644
--- a/src/examples/long_lived_framework.cpp
+++ b/src/examples/long_lived_framework.cpp
@@ -47,6 +47,8 @@
 
 #include "common/parse.hpp"
 
+#include "logging/logging.hpp"
+
 using std::queue;
 using std::string;
 using std::vector;
@@ -573,12 +575,21 @@ public:
 int main(int argc, char** argv)
 {
   Flags flags;
+
   Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
+  if (flags.help) {
+    std::cout << flags.usage() << std::endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    EXIT(EXIT_FAILURE) << flags.usage(load.error());
+    std::cerr << flags.usage(load.error()) << std::endl;
+    return EXIT_FAILURE;
   }
 
+  mesos::internal::logging::initialize(argv[0], false);
+
   // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
     LOG(WARNING) << warning.message;

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/examples/no_executor_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/no_executor_framework.cpp b/src/examples/no_executor_framework.cpp
index 84fbf92..3aa401b 100644
--- a/src/examples/no_executor_framework.cpp
+++ b/src/examples/no_executor_framework.cpp
@@ -38,6 +38,9 @@
 using namespace mesos;
 using namespace mesos::internal;
 
+using std::cerr;
+using std::cout;
+using std::endl;
 using std::string;
 using std::vector;
 
@@ -292,27 +295,34 @@ int main(int argc, char** argv)
 
   Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
-  if (load.isError()) {
-    EXIT(EXIT_FAILURE) << flags.usage(load.error());
-  }
-
-  // Log any flag warnings.
-  foreach (const flags::Warning& warning, load->warnings) {
-    LOG(WARNING) << warning.message;
+  if (flags.help) {
+    cout << flags.usage() << endl;
+    return EXIT_SUCCESS;
   }
 
-  if (flags.help) {
-    EXIT(EXIT_SUCCESS) << flags.usage();
+  if (load.isError()) {
+    cerr << flags.usage(load.error()) << endl;
+    return EXIT_FAILURE;
   }
 
   if (flags.master.isNone()) {
-    EXIT(EXIT_FAILURE) << flags.usage("Missing required option --master");
+    cerr << flags.usage("Missing required option --master") << endl;
+    return EXIT_FAILURE;
   }
 
   if (flags.principal.isSome() != flags.secret.isSome()) {
-    EXIT(EXIT_FAILURE) << flags.usage(
-        "Both --principal and --secret are required"
-        " to enable authentication");
+    cerr << flags.usage(
+                "Both --principal and --secret are required"
+                " to enable authentication")
+         << endl;
+    return EXIT_FAILURE;
+  }
+
+  logging::initialize(argv[0], true, flags); // Catch signals.
+
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
   }
 
   FrameworkInfo framework;
@@ -357,8 +367,6 @@ int main(int argc, char** argv)
 
   taskResources.allocate(framework.role());
 
-  logging::initialize(argv[0], true, flags); // Catch signals.
-
   NoExecutorScheduler scheduler(
       framework,
       flags.command,

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/examples/test_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/test_framework.cpp b/src/examples/test_framework.cpp
index 8356d22..c6a293e 100644
--- a/src/examples/test_framework.cpp
+++ b/src/examples/test_framework.cpp
@@ -239,14 +239,19 @@ int main(int argc, char** argv)
 
   Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
+  if (flags.help) {
+    cout << flags.usage() << endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    cerr << load.error() << endl;
-    usage(argv[0], flags);
-    exit(EXIT_FAILURE);
-  } else if (flags.master.isNone()) {
-    cerr << "Missing --master" << endl;
-    usage(argv[0], flags);
-    exit(EXIT_FAILURE);
+    cerr << flags.usage(load.error()) << endl;
+    return EXIT_FAILURE;
+  }
+
+  if (flags.master.isNone()) {
+    cerr << flags.usage("Missing --master") << endl;
+    return EXIT_FAILURE;
   }
 
   internal::logging::initialize(argv[0], true, flags); // Catch signals.

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/examples/test_http_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/test_http_framework.cpp b/src/examples/test_http_framework.cpp
index 5665b4d..e640800 100644
--- a/src/examples/test_http_framework.cpp
+++ b/src/examples/test_http_framework.cpp
@@ -417,20 +417,24 @@ int main(int argc, char** argv)
 
   Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
+  if (flags.help) {
+    cout << flags.usage() << endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    cerr << load.error() << endl;
-    usage(argv[0], flags);
-    EXIT(EXIT_FAILURE);
-  } else if (flags.master.isNone()) {
-    cerr << "Missing --master" << endl;
-    usage(argv[0], flags);
-    EXIT(EXIT_FAILURE);
+    cerr << flags.usage(load.error()) << endl;
+    return EXIT_FAILURE;
+  }
+
+  if (flags.master.isNone()) {
+    cerr << flags.usage("Missing --master") << endl;
+    return EXIT_FAILURE;
   }
 
-  process::initialize();
   mesos::internal::logging::initialize(argv[0], true, flags); // Catch signals.
 
-  // Log any flag warnings (after logging is initialized).
+  // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
     LOG(WARNING) << warning.message;
   }

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/launcher/fetcher.cpp
----------------------------------------------------------------------
diff --git a/src/launcher/fetcher.cpp b/src/launcher/fetcher.cpp
index ff24ecb..27b2913 100644
--- a/src/launcher/fetcher.cpp
+++ b/src/launcher/fetcher.cpp
@@ -517,7 +517,15 @@ int main(int argc, char* argv[])
 
   Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
-  CHECK_SOME(load) << "Could not load flags: " << load.error();
+  if (flags.help) {
+    std::cout << flags.usage() << std::endl;
+    return EXIT_SUCCESS;
+  }
+
+  if (load.isError()) {
+    std::cerr << flags.usage(load.error()) << std::endl;
+    return EXIT_FAILURE;
+  }
 
   logging::initialize(argv[0], true, flags); // Catch signals.
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/slave/container_loggers/logrotate.cpp
----------------------------------------------------------------------
diff --git a/src/slave/container_loggers/logrotate.cpp b/src/slave/container_loggers/logrotate.cpp
index 61484b1..bd41912 100644
--- a/src/slave/container_loggers/logrotate.cpp
+++ b/src/slave/container_loggers/logrotate.cpp
@@ -40,6 +40,8 @@
 #include <stout/os/su.hpp>
 #include <stout/os/write.hpp>
 
+#include "logging/logging.hpp"
+
 #include "slave/container_loggers/logrotate.hpp"
 
 
@@ -226,10 +228,18 @@ int main(int argc, char** argv)
   // Load and validate flags from the environment and command line.
   Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
 
+  if (flags.help) {
+    std::cout << flags.usage() << std::endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    EXIT(EXIT_FAILURE) << flags.usage(load.error());
+    std::cerr << flags.usage(load.error()) << std::endl;
+    return EXIT_FAILURE;
   }
 
+  mesos::internal::logging::initialize(argv[0], false);
+
   // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
     LOG(WARNING) << warning.message;

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/slave/containerizer/mesos/io/switchboard_main.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/io/switchboard_main.cpp b/src/slave/containerizer/mesos/io/switchboard_main.cpp
index fa0b296..0ff58e1 100644
--- a/src/slave/containerizer/mesos/io/switchboard_main.cpp
+++ b/src/slave/containerizer/mesos/io/switchboard_main.cpp
@@ -24,6 +24,8 @@
 #include <stout/os.hpp>
 #include <stout/try.hpp>
 
+#include "logging/logging.hpp"
+
 #include "slave/containerizer/mesos/io/switchboard.hpp"
 
 namespace io = process::io;
@@ -63,10 +65,19 @@ int main(int argc, char** argv)
 
   // Load and validate flags from the environment and command line.
   Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
+
+  if (flags.help) {
+    std::cout << flags.usage() << std::endl;
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
-    EXIT(EXIT_FAILURE) << flags.usage(load.error());
+    std::cerr << flags.usage(load.error()) << std::endl;
+    return EXIT_FAILURE;
   }
 
+  mesos::internal::logging::initialize(argv[0], false);
+
   // Verify non-optional flags have valid values.
   if (flags.stdin_to_fd.isNone()) {
     EXIT(EXIT_FAILURE) << flags.usage("'--stdin_to_fd' is missing");

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/tests/main.cpp
----------------------------------------------------------------------
diff --git a/src/tests/main.cpp b/src/tests/main.cpp
index 6911b64..cd30cac 100644
--- a/src/tests/main.cpp
+++ b/src/tests/main.cpp
@@ -67,7 +67,8 @@ int main(int argc, char** argv)
 {
 #ifdef __WINDOWS__
   if (!net::wsa_initialize()) {
-    EXIT(EXIT_FAILURE) << "WSA failed to initialize";
+    cerr << "WSA failed to initialize" << endl;
+    return EXIT_FAILURE;
   }
 
   // When we're running a debug build, the Windows implementation of the C
@@ -81,21 +82,34 @@ int main(int argc, char** argv)
 
   GOOGLE_PROTOBUF_VERIFY_VERSION;
 
-  using mesos::internal::tests::flags; // Needed to disabmiguate.
+  using mesos::internal::tests::flags; // Needed to disambiguate.
 
   // Load flags from environment and command line but allow unknown
   // flags (since we might have gtest/gmock flags as well).
   Try<flags::Warnings> load = flags.load("MESOS_", argc, argv, true);
 
+  if (flags.help) {
+    cout << flags.usage() << endl;
+    testing::InitGoogleTest(&argc, argv); // Get usage from gtest too.
+    return EXIT_SUCCESS;
+  }
+
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
     return EXIT_FAILURE;
   }
 
-  if (flags.help) {
-    cout << flags.usage() << endl;
-    testing::InitGoogleTest(&argc, argv); // Get usage from gtest too.
-    return EXIT_SUCCESS;
+  // Be quiet by default!
+  if (!flags.verbose) {
+    flags.quiet = true;
+  }
+
+  // Initialize logging.
+  logging::initialize(argv[0], true, flags);
+
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
   }
 
 // TODO(josephw): Modules are not supported on Windows (MESOS-5994).
@@ -116,8 +130,7 @@ int main(int argc, char** argv)
 
   Try<Nothing> result = tests::initModules(flags.modules);
   if (result.isError()) {
-    cerr << "Error initializing modules: " << result.error() << endl;
-    return EXIT_FAILURE;
+    EXIT(EXIT_FAILURE) << "Error initializing modules: " << result.error();
   }
 #endif // __WINDOWS__
 
@@ -136,25 +149,12 @@ int main(int argc, char** argv)
                        << "`main()` was not the function's first invocation";
   }
 
-  // Be quiet by default!
-  if (!flags.verbose) {
-    flags.quiet = true;
-  }
-
-  // Initialize logging.
-  logging::initialize(argv[0], true, flags);
-
-  // Log any flag warnings (after logging is initialized).
-  foreach (const flags::Warning& warning, load->warnings) {
-    LOG(WARNING) << warning.message;
-  }
-
   // Initialize gmock/gtest.
   testing::InitGoogleTest(&argc, argv);
   testing::FLAGS_gtest_death_test_style = "threadsafe";
 
-  cout << "Source directory: " << flags.source_dir << endl;
-  cout << "Build directory: " << flags.build_dir << endl;
+  LOG(INFO) << "Source directory: " << flags.source_dir;
+  LOG(INFO) << "Build directory: " << flags.build_dir;
 
   // Instantiate our environment. Note that it will be managed by
   // gtest after we add it via testing::AddGlobalTestEnvironment.

http://git-wip-us.apache.org/repos/asf/mesos/blob/387ec70e/src/usage/main.cpp
----------------------------------------------------------------------
diff --git a/src/usage/main.cpp b/src/usage/main.cpp
index 5ad4a3b..64139f4 100644
--- a/src/usage/main.cpp
+++ b/src/usage/main.cpp
@@ -80,7 +80,7 @@ int main(int argc, char** argv)
 
   // Log any flag warnings.
   foreach (const flags::Warning& warning, load->warnings) {
-    LOG(WARNING) << warning.message;
+    cerr << warning.message << endl;
   }
 
   if (flags.pid.isNone()) {