diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index f180cbdfbe..35c4351d95 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -345,7 +345,8 @@ function theme_get_setting($setting_name, $theme = NULL) {
 
       // Generate the path to the logo image.
       if ($cache[$theme]->get('logo.use_default')) {
-        $cache[$theme]->set('logo.url', file_url_transform_relative(file_create_url($theme_object->getPath() . '/logo.svg')));
+        $logo = \Drupal::theme()->getActiveTheme()->getLogo();
+        $cache[$theme]->set('logo.url', file_url_transform_relative(file_create_url($theme_object->getPath() . '/' . $logo)));
       }
       elseif ($logo_path = $cache[$theme]->get('logo.path')) {
         $cache[$theme]->set('logo.url', file_url_transform_relative(file_create_url($logo_path)));
diff --git a/core/lib/Drupal/Core/Theme/ActiveTheme.php b/core/lib/Drupal/Core/Theme/ActiveTheme.php
index 4e03a18d31..d8bf35ee38 100644
--- a/core/lib/Drupal/Core/Theme/ActiveTheme.php
+++ b/core/lib/Drupal/Core/Theme/ActiveTheme.php
@@ -195,6 +195,28 @@ public function getBaseThemes() {
   }
 
   /**
+   * Returns the logo provided by the theme.
+   *
+   * Use the logo specified in the active theme configuration file,
+   * if it exists.
+   * Otherwise use the default logo.svg file as fallback.
+   *
+   * @return string
+   *   The logo.
+   */
+  public function getLogo() {
+    $extension = $this->getExtension();
+    if (isset($extension->info['logo']) && !empty($extension->info['logo'])) {
+      $logo = $extension->info['logo'];
+    }
+    else {
+      $logo = 'logo.svg';
+    }
+
+    return $logo;
+  }
+
+  /**
    * The regions used by the theme.
    *
    * @return string[]
diff --git a/core/tests/Drupal/KernelTests/Core/Theme/ThemeSettingsTest.php b/core/tests/Drupal/KernelTests/Core/Theme/ThemeSettingsTest.php
index 6c2dfb39f0..8d2c4bc41f 100644
--- a/core/tests/Drupal/KernelTests/Core/Theme/ThemeSettingsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Theme/ThemeSettingsTest.php
@@ -60,4 +60,48 @@ function testNoDefaultConfig() {
     $this->assertNotNull(theme_get_setting('features.favicon', $name));
   }
 
+  /**
+   * Tests that the default logo config can be overridden.
+   */
+  public function testLogoConfig() {
+    $theme_handler = $this->container->get('theme_handler');
+    $theme_handler->install(array('test_basetheme'));
+    $theme_handler->setDefault('test_basetheme');
+    $theme = $theme_handler->getTheme('test_basetheme');
+
+    // Test default behaviour.
+    $default = file_url_transform_relative(file_create_url($theme->getPath() . '/logo.svg'));
+    $this->assertSame($default, theme_get_setting('logo.url'));
+
+    $config = $this->config('test_basetheme.settings');
+
+    drupal_static_reset('theme_get_setting');
+
+    $values = [
+      'default_logo' => FALSE,
+      'logo_path' => 'public://logo_with_scheme.png',
+    ];
+    theme_settings_convert_to_config($values, $config)->save();
+
+    // Test filename with scheme.
+    $this->assertSame(
+      file_url_transform_relative(file_create_url('public://logo_with_scheme.png')),
+      theme_get_setting('logo.url')
+    );
+
+    drupal_static_reset('theme_get_setting');
+
+    $values = [
+      'default_logo' => FALSE,
+      'logo_path' => $theme->getPath() . '/logo_relative_path.gif',
+    ];
+    theme_settings_convert_to_config($values, $config)->save();
+
+    // Test relative path.
+    $this->assertSame(
+      file_url_transform_relative(file_create_url($theme->getPath() . '/logo_relative_path.gif')),
+      theme_get_setting('logo.url')
+    );
+  }
+
 }
