diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index c780fec420..a642d9e105 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -198,6 +198,7 @@ rtc_source_set("logging") { ":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 42f4fa941f..ca03d8ea6e 100644 --- a/rtc_base/logging.cc +++ b/rtc_base/logging.cc @@ -540,6 +540,9 @@ void Log(const LogArgType* fmt, ...) { 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(va_arg(args, const void*))); diff --git a/rtc_base/logging.h b/rtc_base/logging.h index 1a14c33729..4f74dcfbce 100644 --- a/rtc_base/logging.h +++ b/rtc_base/logging.h @@ -55,6 +55,7 @@ #include #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 @@ enum class LogArgType : int8_t { kLongDouble, kCharP, kStdString, - // TODO(kwiberg): Add absl::StringView. + kStringView, kVoidP, kLogMetadata, kLogMetadataErr, @@ -236,7 +237,10 @@ inline Val MakeVal( const std::string& x) { return {&x}; } -// TODO(kwiberg): Add absl::string_view +inline Val MakeVal( + const absl::string_view& x) { + return {&x}; +} inline Val MakeVal(const void* x) { return {x}; diff --git a/rtc_base/logging_unittest.cc b/rtc_base/logging_unittest.cc index 263e9926d2..bb6b657b4f 100644 --- a/rtc_base/logging_unittest.cc +++ b/rtc_base/logging_unittest.cc @@ -184,9 +184,45 @@ TEST(LogTest, SingleStream) { 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(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)); }