diff --git a/rtc_base/java/src/org/webrtc/Logging.java b/rtc_base/java/src/org/webrtc/Logging.java
index 779f97e..5dac688 100644
--- a/rtc_base/java/src/org/webrtc/Logging.java
+++ b/rtc_base/java/src/org/webrtc/Logging.java
@@ -88,7 +88,7 @@
   }
 
   // Keep in sync with webrtc/rtc_base/logging.h:LoggingSeverity.
-  public enum Severity { LS_SENSITIVE, LS_VERBOSE, LS_INFO, LS_WARNING, LS_ERROR, LS_NONE }
+  public enum Severity { LS_VERBOSE, LS_INFO, LS_WARNING, LS_ERROR, LS_NONE }
 
   public static void enableLogThreads() {
     nativeEnableLogThreads();
diff --git a/rtc_base/logging.cc b/rtc_base/logging.cc
index 8d6afbc..f7b0627 100644
--- a/rtc_base/logging.cc
+++ b/rtc_base/logging.cc
@@ -308,8 +308,6 @@
       LogThreads();
 
       // Logging levels
-    } else if (token == "sensitive") {
-      current_level = LS_SENSITIVE;
     } else if (token == "verbose") {
       current_level = LS_VERBOSE;
     } else if (token == "info") {
@@ -402,13 +400,6 @@
   // from the shell.
   int prio;
   switch (severity) {
-    case LS_SENSITIVE:
-      __android_log_write(ANDROID_LOG_INFO, tag, "SENSITIVE");
-      if (log_to_stderr) {
-        fprintf(stderr, "SENSITIVE");
-        fflush(stderr);
-      }
-      return;
     case LS_VERBOSE:
       prio = ANDROID_LOG_VERBOSE;
       break;
diff --git a/rtc_base/logging.h b/rtc_base/logging.h
index c7d083e..6dd2648 100644
--- a/rtc_base/logging.h
+++ b/rtc_base/logging.h
@@ -73,8 +73,6 @@
 
 // Note that the non-standard LoggingSeverity aliases exist because they are
 // still in broad use.  The meanings of the levels are:
-//  LS_SENSITIVE: Information which should only be logged with the consent
-//   of the user, due to privacy concerns.
 //  LS_VERBOSE: This level is for data which we do not want to appear in the
 //   normal debug log, but should appear in diagnostic logs.
 //  LS_INFO: Chatty level used in debugging for all sorts of things, the default
@@ -83,7 +81,6 @@
 //  LS_ERROR: Something that should not have occurred.
 //  LS_NONE: Don't log.
 enum LoggingSeverity {
-  LS_SENSITIVE,
   LS_VERBOSE,
   LS_INFO,
   LS_WARNING,
diff --git a/rtc_base/logging_unittest.cc b/rtc_base/logging_unittest.cc
index 42d586a..079cfb1 100644
--- a/rtc_base/logging_unittest.cc
+++ b/rtc_base/logging_unittest.cc
@@ -288,10 +288,7 @@
   void Start() { thread_.Start(); }
 
  private:
-  void Run() {
-    // LS_SENSITIVE by default to avoid cluttering up any real logging going on.
-    RTC_LOG(LS_SENSITIVE) << "RTC_LOG";
-  }
+  void Run() { RTC_LOG(LS_VERBOSE) << "RTC_LOG"; }
 
   static void ThreadEntry(void* p) { static_cast<LogThread*>(p)->Run(); }
 
@@ -312,9 +309,9 @@
   std::string s1, s2, s3;
   LogSinkImpl<StringStream> stream1(&s1), stream2(&s2), stream3(&s3);
   for (int i = 0; i < 1000; ++i) {
-    LogMessage::AddLogToStream(&stream1, LS_INFO);
-    LogMessage::AddLogToStream(&stream2, LS_VERBOSE);
-    LogMessage::AddLogToStream(&stream3, LS_SENSITIVE);
+    LogMessage::AddLogToStream(&stream1, LS_WARNING);
+    LogMessage::AddLogToStream(&stream2, LS_INFO);
+    LogMessage::AddLogToStream(&stream3, LS_VERBOSE);
     LogMessage::RemoveLogToStream(&stream1);
     LogMessage::RemoveLogToStream(&stream2);
     LogMessage::RemoveLogToStream(&stream3);
@@ -371,12 +368,10 @@
 TEST(LogTest, Perf) {
   std::string str;
   LogSinkImpl<StringStream> stream(&str);
-  LogMessage::AddLogToStream(&stream, LS_SENSITIVE);
+  LogMessage::AddLogToStream(&stream, LS_VERBOSE);
 
   const std::string message(80, 'X');
-  {
-    LogMessageForTesting sanity_check_msg(__FILE__, __LINE__, LS_SENSITIVE);
-  }
+  { LogMessageForTesting sanity_check_msg(__FILE__, __LINE__, LS_VERBOSE); }
 
   // We now know how many bytes the logging framework will tag onto every msg.
   const size_t logging_overhead = str.size();
@@ -387,7 +382,7 @@
 
   int64_t start = TimeMillis(), finish;
   for (int i = 0; i < kRepetitions; ++i) {
-    LogMessageForTesting(__FILE__, __LINE__, LS_SENSITIVE).stream() << message;
+    LogMessageForTesting(__FILE__, __LINE__, LS_VERBOSE).stream() << message;
   }
   finish = TimeMillis();
 
diff --git a/sdk/android/src/jni/pc/logging.cc b/sdk/android/src/jni/pc/logging.cc
index 4fb8215..7b35ca0 100644
--- a/sdk/android/src/jni/pc/logging.cc
+++ b/sdk/android/src/jni/pc/logging.cc
@@ -22,7 +22,7 @@
                          JNIEnv* jni,
                          jclass,
                          jint nativeSeverity) {
-  if (nativeSeverity >= rtc::LS_SENSITIVE && nativeSeverity <= rtc::LS_NONE) {
+  if (nativeSeverity >= rtc::LS_VERBOSE && nativeSeverity <= rtc::LS_NONE) {
     rtc::LogMessage::LogToDebug(
         static_cast<rtc::LoggingSeverity>(nativeSeverity));
   }
diff --git a/sdk/objc/api/logging/RTCCallbackLogger.mm b/sdk/objc/api/logging/RTCCallbackLogger.mm
index 9bbb530..8d415b9 100644
--- a/sdk/objc/api/logging/RTCCallbackLogger.mm
+++ b/sdk/objc/api/logging/RTCCallbackLogger.mm
@@ -48,8 +48,6 @@
  private:
   static RTCLoggingSeverity NativeSeverityToObjcSeverity(rtc::LoggingSeverity severity) {
     switch (severity) {
-      case rtc::LS_SENSITIVE:
-        return RTCLoggingSeveritySensitive;
       case rtc::LS_VERBOSE:
         return RTCLoggingSeverityVerbose;
       case rtc::LS_INFO:
@@ -122,8 +120,6 @@
 
 - (rtc::LoggingSeverity)rtcSeverity {
   switch (_severity) {
-    case RTCLoggingSeveritySensitive:
-      return rtc::LS_SENSITIVE;
     case RTCLoggingSeverityVerbose:
       return rtc::LS_VERBOSE;
     case RTCLoggingSeverityInfo:
diff --git a/sdk/objc/base/RTCLogging.h b/sdk/objc/base/RTCLogging.h
index b20a4b4..754945c 100644
--- a/sdk/objc/base/RTCLogging.h
+++ b/sdk/objc/base/RTCLogging.h
@@ -14,7 +14,6 @@
 
 // Subset of rtc::LoggingSeverity.
 typedef NS_ENUM(NSInteger, RTCLoggingSeverity) {
-  RTCLoggingSeveritySensitive,
   RTCLoggingSeverityVerbose,
   RTCLoggingSeverityInfo,
   RTCLoggingSeverityWarning,
diff --git a/sdk/objc/base/RTCLogging.mm b/sdk/objc/base/RTCLogging.mm
index 3aae47a..e8dae02 100644
--- a/sdk/objc/base/RTCLogging.mm
+++ b/sdk/objc/base/RTCLogging.mm
@@ -14,8 +14,6 @@
 
 rtc::LoggingSeverity RTCGetNativeLoggingSeverity(RTCLoggingSeverity severity) {
   switch (severity) {
-    case RTCLoggingSeveritySensitive:
-      return rtc::LS_SENSITIVE;
     case RTCLoggingSeverityVerbose:
       return rtc::LS_VERBOSE;
     case RTCLoggingSeverityInfo:
