text: // Copyright 2020 The Chromium OS Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #include <iostream>
  
  #include <base/command_line.h>
  #include <base/logging.h>
  #include <brillo/flag_helper.h>
  
  #include "shill/cli/top_command.h"
  
  // Allow for LOG(INFO) to look like plain output, while providing the usual
  // file and line information for both verbose and warning/error messages.
  bool HandleMessage(int severity,
                     const char* /* file */,
                     int /* line */,
                     size_t message_start,
                     const std::string& message) {
    bool skip_header = severity == logging::LOG_INFO;
    const char* str = message.c_str();
    if (skip_header) {
      str += message_start;
    }
  
    if (severity <= logging::LOG_INFO) {
      std::cout << str << std::flush;
      return true;
    }
  
    std::cerr << str;
    return severity != logging::LOG_FATAL;
  }
  
  int main(int argc, char** argv) {
    DEFINE_int32(log_level, 0,
                 "Logging level - 0: LOG(INFO), 1: LOG(WARNING), 2: LOG(ERROR), "
                 "-1: VLOG(1), -2: VLOG(2), ...");
    brillo::FlagHelper::Init(argc, argv, "Shill Command Line Interface");
    logging::SetLogMessageHandler(HandleMessage);
    logging::SetMinLogLevel(FLAGS_log_level);
  
    std::vector<std::string> args =
        base::CommandLine::ForCurrentProcess()->GetArgs();
  
    shill_cli::TopCommand cmd;
    return !cmd.Run(args.cbegin(), args.cend(), argv[0]);
  }
  