Add support for logging absl::string_view.

Bug: webrtc:8982
Change-Id: I5691f91ea663756666cf187ee223ede50f87d5f0
Reviewed-on: https://webrtc-review.googlesource.com/99840
Commit-Queue: Jonas Olsson <jonasolsson@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24707}
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index c780fec..a642d9e 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -198,6 +198,7 @@
     ":platform_thread_types",
     ":stringutils",
     ":timeutils",
+    "//third_party/abseil-cpp/absl/strings",
   ]
 
   if (build_with_chromium) {
diff --git a/rtc_base/logging.cc b/rtc_base/logging.cc
index 42f4fa9..ca03d8e 100644
--- a/rtc_base/logging.cc
+++ b/rtc_base/logging.cc
@@ -540,6 +540,9 @@
       case LogArgType::kStdString:
         log_message.stream() << *va_arg(args, const std::string*);
         break;
+      case LogArgType::kStringView:
+        log_message.stream() << *va_arg(args, const absl::string_view*);
+        break;
       case LogArgType::kVoidP:
         log_message.stream() << rtc::ToHex(
             reinterpret_cast<uintptr_t>(va_arg(args, const void*)));
diff --git a/rtc_base/logging.h b/rtc_base/logging.h
index 1a14c33..4f74dcf 100644
--- a/rtc_base/logging.h
+++ b/rtc_base/logging.h
@@ -55,6 +55,7 @@
 #include <CoreServices/CoreServices.h>
 #endif
 
+#include "absl/strings/string_view.h"
 #include "rtc_base/constructormagic.h"
 #include "rtc_base/deprecation.h"
 #include "rtc_base/strings/string_builder.h"
@@ -174,7 +175,7 @@
   kLongDouble,
   kCharP,
   kStdString,
-  // TODO(kwiberg): Add absl::StringView.
+  kStringView,
   kVoidP,
   kLogMetadata,
   kLogMetadataErr,
@@ -236,7 +237,10 @@
     const std::string& x) {
   return {&x};
 }
-// TODO(kwiberg): Add absl::string_view
+inline Val<LogArgType::kStringView, const absl::string_view*> MakeVal(
+    const absl::string_view& x) {
+  return {&x};
+}
 
 inline Val<LogArgType::kVoidP, const void*> MakeVal(const void* x) {
   return {x};
diff --git a/rtc_base/logging_unittest.cc b/rtc_base/logging_unittest.cc
index 263e992..bb6b657 100644
--- a/rtc_base/logging_unittest.cc
+++ b/rtc_base/logging_unittest.cc
@@ -184,9 +184,45 @@
   EXPECT_NE(std::string::npos, str.find("INFO"));
   EXPECT_EQ(std::string::npos, str.find("VERBOSE"));
 
+  int i = 1;
+  long l = 2l;
+  long long ll = 3ll;
+
+  unsigned int u = 4u;
+  unsigned long ul = 5ul;
+  unsigned long long ull = 6ull;
+
+  std::string s1 = "char*";
+  std::string s2 = "std::string";
+  std::string s3 = "absl::stringview";
+
+  void* p = reinterpret_cast<void*>(0xabcd);
+
+  // Log all suported types(except doubles/floats) as a sanity-check.
+  RTC_LOG(LS_INFO) << "|" << i << "|" << l << "|" << ll << "|" << u << "|" << ul
+                   << "|" << ull << "|" << s1.c_str() << "|" << s2 << "|"
+                   << absl::string_view(s3) << "|" << p << "|";
+
+  // Signed integers
+  EXPECT_NE(std::string::npos, str.find("|1|"));
+  EXPECT_NE(std::string::npos, str.find("|2|"));
+  EXPECT_NE(std::string::npos, str.find("|3|"));
+
+  // Unsigned integers
+  EXPECT_NE(std::string::npos, str.find("|4|"));
+  EXPECT_NE(std::string::npos, str.find("|5|"));
+  EXPECT_NE(std::string::npos, str.find("|6|"));
+
+  // Strings
+  EXPECT_NE(std::string::npos, str.find("|char*|"));
+  EXPECT_NE(std::string::npos, str.find("|std::string|"));
+  EXPECT_NE(std::string::npos, str.find("|absl::stringview|"));
+
+  // void*
+  EXPECT_NE(std::string::npos, str.find("|abcd|"));
+
   LogMessage::RemoveLogToStream(&stream);
   EXPECT_EQ(LS_NONE, LogMessage::GetLogToStream(&stream));
-
   EXPECT_EQ(sev, LogMessage::GetLogToStream(nullptr));
 }