diff --git a/core/includes/errors.inc b/core/includes/errors.inc
index 0524170..12d773a 100644
--- a/core/includes/errors.inc
+++ b/core/includes/errors.inc
@@ -163,7 +163,7 @@ function _drupal_render_exception_safe($exception) {
  *   TRUE if an error should be displayed.
  */
 function error_displayable($error = NULL) {
-  $error_level = variable_get('error_level', ERROR_REPORTING_DISPLAY_ALL);
+  $error_level = config('system.logging')->get('error_level');
   $updating = (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'update');
   $all_errors_displayed = ($error_level == ERROR_REPORTING_DISPLAY_ALL);
   $error_needs_display = ($error_level == ERROR_REPORTING_DISPLAY_SOME &&
diff --git a/core/modules/dblog/config/dblog.logging.xml b/core/modules/dblog/config/dblog.logging.xml
new file mode 100644
index 0000000..973f8d2
--- /dev/null
+++ b/core/modules/dblog/config/dblog.logging.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<config>
+  <dblog_row_limit>1000</dblog_row_limit>
+</config>
diff --git a/core/modules/dblog/dblog.install b/core/modules/dblog/dblog.install
index 23f85ba..df14f32 100644
--- a/core/modules/dblog/dblog.install
+++ b/core/modules/dblog/dblog.install
@@ -92,8 +92,20 @@ function dblog_schema() {
 }
 
 /**
- * Implements hook_uninstall().
+ * @defgroup updates-7.x-to-8.x Updates from 7.x to 8.x
+ * @{
+ * Update functions from 7.x to 8.x.
  */
-function dblog_uninstall() {
-  variable_del('dblog_row_limit');
+
+/**
+ * Update settings to the new configuration system.
+ **/
+function dblog_update_8000() {
+  config_install_default_config('dblog');
+  update_variables_to_config('dblog.logging');
 }
+
+/**
+ * @} End of "defgroup updates-7.x-to-8.x"
+ * The next series of updates should start at 9000.
+ */
diff --git a/core/modules/dblog/dblog.module b/core/modules/dblog/dblog.module
index a43e0a5..5294daf 100644
--- a/core/modules/dblog/dblog.module
+++ b/core/modules/dblog/dblog.module
@@ -102,7 +102,7 @@ function dblog_init() {
  */
 function dblog_cron() {
   // Cleanup the watchdog table.
-  $row_limit = variable_get('dblog_row_limit', 1000);
+  $row_limit = config('dblog.logging')->get('dblog_row_limit');
 
   // For row limit n, get the wid of the nth row in descending wid order.
   // Counting the most recent n rows avoids issues with wid number sequences,
@@ -163,11 +163,24 @@ function dblog_form_system_logging_settings_alter(&$form, $form_state) {
   $form['dblog_row_limit'] = array(
     '#type' => 'select',
     '#title' => t('Database log messages to keep'),
-    '#default_value' => variable_get('dblog_row_limit', 1000),
+    '#default_value' => config('dblog.logging')->get('dblog_row_limit'),
     '#options' => array(0 => t('All')) + drupal_map_assoc(array(100, 1000, 10000, 100000, 1000000)),
     '#description' => t('The maximum number of messages to keep in the database log. Requires a <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status')))
   );
   $form['actions']['#weight'] = 1;
+
+  $form['#submit'][] = 'dblog_logging_settings_submit';
+}
+
+/**
+ * Form submission handler for dblog logging settings.
+ *
+ * @ingroup forms
+ */
+function dblog_logging_settings_submit($form, &$form_state) {
+  config('dblog.logging')
+    ->set('dblog_row_limit', $form_state['values']['dblog_row_limit'])
+    ->save();
 }
 
 /**
diff --git a/core/modules/dblog/dblog.test b/core/modules/dblog/dblog.test
index 92763c1..81ac5ee 100644
--- a/core/modules/dblog/dblog.test
+++ b/core/modules/dblog/dblog.test
@@ -63,11 +63,8 @@ class DBLogTestCase extends WebTestBase {
     $this->assertResponse(200);
 
     // Check row limit variable.
-    $current_limit = variable_get('dblog_row_limit', 1000);
+    $current_limit = config('dblog.logging')->get('dblog_row_limit');
     $this->assertTrue($current_limit == $row_limit, t('[Cache] Row limit variable of @count equals row limit of @limit', array('@count' => $current_limit, '@limit' => $row_limit)));
-    // Verify dblog row limit equals specified row limit.
-    $current_limit = unserialize(db_query("SELECT value FROM {variable} WHERE name = :dblog_limit", array(':dblog_limit' => 'dblog_row_limit'))->fetchField());
-    $this->assertTrue($current_limit == $row_limit, t('[Variable table] Row limit variable of @count equals row limit of @limit', array('@count' => $current_limit, '@limit' => $row_limit)));
   }
 
   /**
diff --git a/core/modules/syslog/config/syslog.logging.xml b/core/modules/syslog/config/syslog.logging.xml
new file mode 100644
index 0000000..8874045
--- /dev/null
+++ b/core/modules/syslog/config/syslog.logging.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<config>
+  <syslog_identity>drupal</syslog_identity>
+  <syslog_format>!base_url|!timestamp|!type|!ip|!request_uri|!referer|!uid|!link|!message</syslog_format>
+</config>
diff --git a/core/modules/syslog/syslog.install b/core/modules/syslog/syslog.install
index 12ff4fb..5dfa058 100644
--- a/core/modules/syslog/syslog.install
+++ b/core/modules/syslog/syslog.install
@@ -6,10 +6,31 @@
  */
 
 /**
- * Implements hook_uninstall().
+ * Implements hook_install().
  */
-function syslog_uninstall() {
-  variable_del('syslog_identity');
-  variable_del('syslog_facility');
-  variable_del('syslog_format');
+function syslog_install() {
+  // The default facility setting depends on the operating system, so it needs
+  // to be set dynamically during installation.
+  config('syslog.logging')
+    ->set('syslog_facility', defined('LOG_LOCAL0') ? LOG_LOCAL0 : LOG_USER)
+    ->save();
 }
+
+/**
+ * @defgroup updates-7.x-to-8.x Updates from 7.x to 8.x
+ * @{
+ * Update functions from 7.x to 8.x.
+ */
+
+/**
+ * Update settings to the new configuration system.
+ **/
+function syslog_update_8000() {
+  config_install_default_config('syslog');
+  update_variables_to_config('syslog.logging');
+}
+
+/**
+ * @} End of "defgroup updates-7.x-to-8.x"
+ * The next series of updates should start at 9000.
+ */
diff --git a/core/modules/syslog/syslog.module b/core/modules/syslog/syslog.module
index 1327606..5b840db 100644
--- a/core/modules/syslog/syslog.module
+++ b/core/modules/syslog/syslog.module
@@ -45,18 +45,19 @@ function syslog_help($path, $arg) {
  * Implements hook_form_FORM_ID_alter().
  */
 function syslog_form_system_logging_settings_alter(&$form, &$form_state) {
+  $config = config('syslog.logging');
   $help = module_exists('help') ? ' ' . l(t('More information'), 'admin/help/syslog') . '.' : NULL;
   $form['syslog_identity'] = array(
     '#type'          => 'textfield',
     '#title'         => t('Syslog identity'),
-    '#default_value' => variable_get('syslog_identity', 'drupal'),
+    '#default_value' => $config->get('syslog_identity'),
     '#description'   => t('A string that will be prepended to every message logged to Syslog. If you have multiple sites logging to the same Syslog log file, a unique identity per site makes it easy to tell the log entries apart.') . $help,
   );
   if (defined('LOG_LOCAL0')) {
     $form['syslog_facility'] = array(
       '#type'          => 'select',
       '#title'         => t('Syslog facility'),
-      '#default_value' => variable_get('syslog_facility', LOG_LOCAL0),
+      '#default_value' => $config->get('syslog_facility'),
       '#options'       => syslog_facility_list(),
       '#description'   => t('Depending on the system configuration, Syslog and other logging tools use this code to identify or filter messages from within the entire system log.') . $help,
      );
@@ -64,10 +65,25 @@ function syslog_form_system_logging_settings_alter(&$form, &$form_state) {
   $form['syslog_format'] = array(
     '#type'          => 'textarea',
     '#title'         => t('Syslog format'),
-    '#default_value' => variable_get('syslog_format', '!base_url|!timestamp|!type|!ip|!request_uri|!referer|!uid|!link|!message'),
+    '#default_value' => $config->get('syslog_format'),
     '#description'   => t('Specify the format of the syslog entry. Available variables are: <dl><dt><code>!base_url</code></dt><dd>Base URL of the site.</dd><dt><code>!timestamp</code></dt><dd>Unix timestamp of the log entry.</dd><dt><code>!type</code></dt><dd>The category to which this message belongs.</dd><dt><code>!ip</code></dt><dd>IP address of the user triggering the message.</dd><dt><code>!request_uri</code></dt><dd>The requested URI.</dd><dt><code>!referer</code></dt><dd>HTTP Referer if available.</dd><dt><code>!uid</code></dt><dd>User ID.</dd><dt><code>!link</code></dt><dd>A link to associate with the message.</dd><dt><code>!message</code></dt><dd>The message to store in the log.</dd></dl>'),
   );
   $form['actions']['#weight'] = 1;
+
+  $form['#submit'][] = 'syslog_logging_settings_submit';
+}
+
+/**
+ * Form submission handler for logging settings.
+ *
+ * @ingroup forms
+ */
+function syslog_logging_settings_submit($form, &$form_state) {
+  config('syslog.logging')
+    ->set('syslog_identity', $form_state['values']['identity'])
+    ->set('syslog_facility', $form_state['values']['facility'])
+    ->set('syslog_format', $form_state['values']['format'])
+    ->save();
 }
 
  /**
@@ -95,14 +111,14 @@ function syslog_watchdog(array $log_entry) {
   global $base_url;
 
   $log_init = &drupal_static(__FUNCTION__, FALSE);
+  $config = config('syslog.logging');
 
   if (!$log_init) {
     $log_init = TRUE;
-    $default_facility = defined('LOG_LOCAL0') ? LOG_LOCAL0 : LOG_USER;
-    openlog(variable_get('syslog_identity', 'drupal'), LOG_NDELAY, variable_get('syslog_facility', $default_facility));
+    openlog($config->get('syslog_identity'), LOG_NDELAY, $config->get('syslog_facility'));
   }
 
-  $message = strtr(variable_get('syslog_format', '!base_url|!timestamp|!type|!ip|!request_uri|!referer|!uid|!link|!message'), array(
+  $message = strtr($config->get('syslog_format'), array(
     '!base_url'    => $base_url,
     '!timestamp'   => $log_entry['timestamp'],
     '!type'        => $log_entry['type'],
diff --git a/core/modules/system/config/system.logging.xml b/core/modules/system/config/system.logging.xml
new file mode 100644
index 0000000..b1a6936
--- /dev/null
+++ b/core/modules/system/config/system.logging.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<config>
+  <error_level>2</error_level>
+</config>
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index dcc289a..a4b98e2 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -1623,7 +1623,7 @@ function system_logging_settings() {
   $form['error_level'] = array(
     '#type' => 'radios',
     '#title' => t('Error messages to display'),
-    '#default_value' => variable_get('error_level', ERROR_REPORTING_DISPLAY_ALL),
+    '#default_value' => config('system.logging')->get('error_level'),
     '#options' => array(
       ERROR_REPORTING_HIDE => t('None'),
       ERROR_REPORTING_DISPLAY_SOME => t('Errors and warnings'),
@@ -1632,7 +1632,24 @@ function system_logging_settings() {
     '#description' => t('It is recommended that sites running on production environments do not display any errors.'),
   );
 
-  return system_settings_form($form);
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save configuration'),
+  );
+  return $form;
+}
+
+/**
+ * Form submission handler for system_logging_settings().
+ *
+ * @ingroup forms
+ */
+function system_logging_settings_submit($form, &$form_state) {
+  config('system.logging')
+    ->set('error_level', $form_state['values']['error_level'])
+    ->save();
+  drupal_set_message('The configuration options have been saved.');
 }
 
 /**
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 83def52..f1b840d 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1856,6 +1856,14 @@ function system_update_8008() {
 }
 
 /**
+ * Update settings to the new configuration system.
+ **/
+function system_update_8009() {
+  config_install_default_config('system');
+  update_variables_to_config('system.logging');
+}
+
+/**
  * @} End of "defgroup updates-7.x-to-8.x"
  * The next series of updates should start at 9000.
  */
diff --git a/core/modules/system/tests/error.test b/core/modules/system/tests/error.test
index a088902..6e2870c 100644
--- a/core/modules/system/tests/error.test
+++ b/core/modules/system/tests/error.test
@@ -23,6 +23,7 @@ class DrupalErrorHandlerUnitTest extends WebTestBase {
    * Test the error handler.
    */
   function testErrorHandler() {
+    $config = config('system.logging');
     $error_notice = array(
       '%type' => 'Notice',
       '!message' => 'Undefined variable: bananas',
@@ -43,7 +44,7 @@ class DrupalErrorHandlerUnitTest extends WebTestBase {
     );
 
     // Set error reporting to collect notices.
-    variable_set('error_level', ERROR_REPORTING_DISPLAY_ALL);
+    $config->set('error_level', ERROR_REPORTING_DISPLAY_ALL)->save();
     $this->drupalGet('error-test/generate-warnings');
     $this->assertResponse(200, t('Received expected HTTP status code.'));
     $this->assertErrorMessage($error_notice);
@@ -51,7 +52,7 @@ class DrupalErrorHandlerUnitTest extends WebTestBase {
     $this->assertErrorMessage($error_user_notice);
 
     // Set error reporting to not collect notices.
-    variable_set('error_level', ERROR_REPORTING_DISPLAY_SOME);
+    $config->set('error_level', ERROR_REPORTING_DISPLAY_SOME)->save();
     $this->drupalGet('error-test/generate-warnings');
     $this->assertResponse(200, t('Received expected HTTP status code.'));
     $this->assertNoErrorMessage($error_notice);
@@ -59,7 +60,7 @@ class DrupalErrorHandlerUnitTest extends WebTestBase {
     $this->assertErrorMessage($error_user_notice);
 
     // Set error reporting to not show any errors.
-    variable_set('error_level', ERROR_REPORTING_HIDE);
+    $config->set('error_level', ERROR_REPORTING_HIDE)->save();
     $this->drupalGet('error-test/generate-warnings');
     $this->assertResponse(200, t('Received expected HTTP status code.'));
     $this->assertNoErrorMessage($error_notice);
