ART: Add logcat output to signal_dumper

Add option "-l" to log to logcat.

As this requires for simplicity to unify the output path, this
degrades the stderr output readability because of the filename
and so on output from LOG.

Bug: 138868214
Test: manual
Change-Id: I6e6920874e6062cd9c27ccafcf59e63ff2334f77
diff --git a/tools/signal_dumper/signal_dumper.cc b/tools/signal_dumper/signal_dumper.cc
index 504d01f..62b5f27 100644
--- a/tools/signal_dumper/signal_dumper.cc
+++ b/tools/signal_dumper/signal_dumper.cc
@@ -449,7 +449,7 @@
       abi_str = "x86_64";
       break;
   }
-  std::cerr << "ABI: '" << abi_str << "'" << std::endl;
+  LOG(ERROR) << "ABI: '" << abi_str << "'" << std::endl;
 }
 
 }  // namespace ptrace
@@ -515,8 +515,7 @@
                 const std::string* addr2line_path,
                 const char* prefix,
                 BacktraceMap* map) {
-  // Use std::cerr to avoid the LOG prefix.
-  std::cerr << std::endl << "=== pid: " << pid << " tid: " << tid << " ===" << std::endl;
+  LOG(ERROR) << std::endl << "=== pid: " << pid << " tid: " << tid << " ===" << std::endl;
 
   constexpr uint32_t kMaxWaitMicros = 1000 * 1000;  // 1s.
   if (pid != tid && !WaitForSigStopped(tid, kMaxWaitMicros)) {
@@ -574,19 +573,19 @@
       }
       oss << ")";
     }
-    std::cerr << oss.str() << std::endl;
+    LOG(ERROR) << oss.str() << std::endl;
     if (try_addr2line && addr2line_path != nullptr) {
       addr2line::Addr2line(*addr2line_path,
                            it->map.name,
                            it->rel_pc,
-                           std::cerr,
+                           LOG_STREAM(ERROR),
                            prefix,
                            &addr2line_state);
     }
   }
 
   if (addr2line_state != nullptr) {
-    addr2line::Drain(0, prefix, &addr2line_state, std::cerr);
+    addr2line::Drain(0, prefix, &addr2line_state, LOG_STREAM(ERROR));
   }
 }
 
@@ -681,10 +680,25 @@
 }  // namespace art
 
 int main(int argc ATTRIBUTE_UNUSED, char** argv) {
+  android::base::InitLogging(argv);
+
   int signal = SIGRTMIN + 2;
 
   size_t index = 1u;
   CHECK(argv[index] != nullptr);
+
+  bool to_logcat = false;
+#ifdef __ANDROID__
+  if (strcmp(argv[index], "-l") == 0) {
+    index++;
+    CHECK(argv[index] != nullptr);
+    to_logcat = true;
+  }
+#endif
+  if (!to_logcat) {
+    android::base::SetLogger(android::base::StderrLogger);
+  }
+
   if (strcmp(argv[index], "-s") == 0) {
     index++;
     CHECK(argv[index] != nullptr);