diff --git a/core/core.services.yml b/core/core.services.yml
index 40c6a8a..8b6df43 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -1234,7 +1234,7 @@ services:
     class: Drupal\Core\EventSubscriber\DefaultExceptionSubscriber
     tags:
       - { name: event_subscriber }
-    arguments: ['@config.factory']
+    arguments: ['@config.factory', '@current_user']
   exception.logger:
     class: Drupal\Core\EventSubscriber\ExceptionLoggingSubscriber
     tags:
diff --git a/core/includes/errors.inc b/core/includes/errors.inc
index e3ad1c8..c7331e6 100644
--- a/core/includes/errors.inc
+++ b/core/includes/errors.inc
@@ -255,6 +255,18 @@ function _drupal_log_error($error, $fatal = FALSE) {
       // Should not translate the string to avoid errors producing more errors.
       $message = 'The website encountered an unexpected error. Please try again later.' . '<br />' . $message;
 
+      // Check if error is not displayable.
+      if (!error_displayable($error)) {
+        // Try to help people which develop on sites. Using localhost or being
+        // user 1 is a good indicator.
+        $is_super_user = \Drupal::hasService('current_user') && \Drupal::service('current_user')->accountInitialized() && \Drupal::service('current_user')->id() == 1;
+        if ($is_super_user || _is_private_ip()) {
+          $message .= 'In order to see the error message, go to "Logging and 
+            errors" in the Configuration section, or enable in your development 
+            environment only via a settings.local.php file - see settings.php.';
+        }
+      }
+
       if ($is_installer) {
         // install_display_output() prints the output and ends script execution.
         $output = array(
@@ -286,6 +298,21 @@ function _drupal_log_error($error, $fatal = FALSE) {
 }
 
 /**
+ * Determine if user using a local IP address.
+ * Validate Drupal::hasRequest() before calling this.
+ *
+ * @return bool
+ *   true = private, false = public
+ */
+function _is_private_ip() {
+  $ip = \Drupal::request()->getClientIps();
+
+  // true if address in private IPv4 space, or IPv6 address of ::1
+  return !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)
+         || $ip === '::1';
+}
+
+/**
  * Returns the current error level.
  *
  * This function should only be used to get the current error level prior to the
diff --git a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php
index 4737e80..ba82b89 100644
--- a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Session\AccountProxyInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\Utility\Error;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -38,13 +39,23 @@ class DefaultExceptionSubscriber implements EventSubscriberInterface {
   protected $configFactory;
 
   /**
+   * The account proxy.
+   *
+   * @var \Drupal\Core\Session\AccountProxyInterface
+   */
+  protected $user;
+
+  /**
    * Constructs a new DefaultExceptionSubscriber.
    *
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The configuration factory.
+   * @param \Drupal\Core\Session\AccountProxyInterface $user
+   *   The account proxy.
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
+  public function __construct(ConfigFactoryInterface $config_factory, AccountProxyInterface $user) {
     $this->configFactory = $config_factory;
+    $this->user = $user;
   }
 
   /**
@@ -116,8 +127,22 @@ protected function onHtml(GetResponseForExceptionEvent $event) {
         $message = SafeMarkup::format('%type: @message in %function (line %line of %file). <pre class="backtrace">@backtrace</pre>', $error);
       }
     }
+    else {
+      // Try to help people which develop on sites. Using localhost or being
+      // user 1 is a good indicator.
+      $is_super_admin = $this->user->accountInitialized() && $this->user->id() == 1;
+      if ($is_super_admin || _is_private_ip()) {
+        $message = 'In order to see the error message, go to "Logging and 
+          errors" in the Configuration section, or enable in your development 
+          environment only via a settings.local.php file - see settings.php.';
+      }
+    }
+
+    // We use the bare string directly as no formatting is required and we are
+    // in the middle of error handling, and we don't want t() to cause further
+    // errors.
+    $content = 'The website encountered an unexpected error. Please try again later.';
 
-    $content = $this->t('The website encountered an unexpected error. Please try again later.');
     $content .= $message ? '</br></br>' . $message : '';
     $response = new Response($content, 500);
 
diff --git a/core/lib/Drupal/Core/Session/AccountProxy.php b/core/lib/Drupal/Core/Session/AccountProxy.php
index afe800b..34d993c 100644
--- a/core/lib/Drupal/Core/Session/AccountProxy.php
+++ b/core/lib/Drupal/Core/Session/AccountProxy.php
@@ -55,6 +55,13 @@ public function setAccount(AccountInterface $account) {
   /**
    * {@inheritdoc}
    */
+  public function accountInitialized() {
+    return isset($this->account);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getAccount() {
     if (!isset($this->account)) {
       if ($this->id) {
diff --git a/core/lib/Drupal/Core/Session/AccountProxyInterface.php b/core/lib/Drupal/Core/Session/AccountProxyInterface.php
index 378b89d..802c4ef 100644
--- a/core/lib/Drupal/Core/Session/AccountProxyInterface.php
+++ b/core/lib/Drupal/Core/Session/AccountProxyInterface.php
@@ -43,4 +43,11 @@ public function getAccount();
    */
   public function setInitialAccountId($account_id);
 
+  /**
+   * Determines whether the active user was determined already.
+   *
+   * @return bool
+   */
+  public function accountInitialized();
+
 }
diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php
index 6582500..405cb8f 100644
--- a/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php
+++ b/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\Core\EventSubscriber;
 
 use Drupal\Core\EventSubscriber\DefaultExceptionSubscriber;
+use Drupal\Core\Session\AccountProxy;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
@@ -22,12 +23,13 @@ class DefaultExceptionSubscriberTest extends UnitTestCase {
    */
   public function testOnExceptionWithUnknownFormat() {
     $config_factory = $this->getConfigFactoryStub();
+    $account_proxy = new AccountProxy();
 
     $kernel = $this->prophesize(HttpKernelInterface::class);
     $request = Request::create('/test?_format=bananas');
     $e = new MethodNotAllowedHttpException(['POST', 'PUT'], 'test message');
     $event = new GetResponseForExceptionEvent($kernel->reveal(), $request, 'GET', $e);
-    $subscriber = new DefaultExceptionSubscriber($config_factory);
+    $subscriber = new DefaultExceptionSubscriber($config_factory, $account_proxy);
     $subscriber->onException($event);
     $response = $event->getResponse();
 
