diff --git a/core/modules/dblog/dblog.module b/core/modules/dblog/dblog.module
index a0afcd4..bc35f36 100644
--- a/core/modules/dblog/dblog.module
+++ b/core/modules/dblog/dblog.module
@@ -196,3 +196,22 @@ function dblog_theme() {
     ),
   );
 }
+
+/**
+ * Provides a mapping between the severity constants and a readable version.
+ *
+ * @return array
+ *   An assosiative array with the severity constant as key and ... as value.
+ */
+function dblog_views_severity_options_callback() {
+  return array(
+    WATCHDOG_DEBUG => 'dblog-debug',
+    WATCHDOG_INFO => 'dblog-info',
+    WATCHDOG_NOTICE => 'dblog-notice',
+    WATCHDOG_WARNING => 'dblog-warning',
+    WATCHDOG_ERROR => 'dblog-error',
+    WATCHDOG_CRITICAL => 'dblog-critical',
+    WATCHDOG_ALERT => 'dblog-alert',
+    WATCHDOG_EMERGENCY => 'dblog-emergency',
+  );
+}
diff --git a/core/modules/dblog/dblog.views.inc b/core/modules/dblog/dblog.views.inc
new file mode 100644
index 0000000..e8cae28
--- /dev/null
+++ b/core/modules/dblog/dblog.views.inc
@@ -0,0 +1,223 @@
+<?php
+
+/**
+ * @file
+ * Provide views data and ids for dblog.module.
+ *
+ * @ingroup views_module_ids
+ */
+
+/**
+ * Implements hook_views_data().
+ */
+function dblog_views_data() {
+  $data = array();
+
+  $data['watchdog']['table']['group'] = t('Watchdog');
+
+  $data['watchdog']['table']['base'] = array(
+    'field' => 'wid',
+    'title' => t('Watchdog event'),
+    'help' => t('Contains a list of log entries.'),
+  );
+
+  $data['watchdog']['wid'] = array(
+    'title' => t('WID'),
+    'help' => t('Unique watchdog event ID.'),
+    'field' => array(
+      'id' => 'numeric',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'id' => 'numeric',
+    ),
+    'argument' => array(
+      'id' => 'numeric',
+    ),
+    'search' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['uid'] = array(
+    'title' => t('UID'),
+    'help' => t('The user ID of the user on which the log entry was written..'),
+    'field' => array(
+      'id' => 'numeric',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'id' => 'numeric',
+    ),
+    'argument' => array(
+      'id' => 'numeric',
+    ),
+    'search' => array(
+      'id' => 'standard',
+    ),
+    'relationship' => array(
+      'title' => t('User'),
+      'help' => t('The user on which the log entry as written.'),
+      'base' => 'users',
+      'base field' => 'uid',
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['type'] = array(
+    'title' => t('Type'),
+    'help' => t('The of the log entry, for example "user" or "page not found.".'),
+    'field' => array(
+      'id' => 'standard',
+    ),
+    'argument' => array(
+      'id' => 'string',
+    ),
+    'filter' => array(
+      'id' => 'string',
+    ),
+    'sort' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['message'] = array(
+    'title' => t('Message'),
+    'help' => t('The actual message of the log entry.'),
+    'field' => array(
+      'id' => 'dblog_message',
+    ),
+    'argument' => array(
+      'id' => 'string',
+    ),
+    'filter' => array(
+      'id' => 'string',
+    ),
+    'sort' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['variables'] = array(
+    'title' => t('Variables'),
+    'help' => t('The variables of the log entry in a serialized format.'),
+    'field' => array(
+      'id' => 'serialized',
+    ),
+    'argument' => array(
+      'id' => 'string',
+    ),
+    'filter' => array(
+      'id' => 'string',
+    ),
+    'sort' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['severity'] = array(
+    'title' => t('Severity level'),
+    'help' => t('The severity level of the event; ranges from 0 (Emergency) to 7 (Debug).'),
+    'field' => array(
+      'id' => 'machine_name',
+      'options callback' => 'dblog_views_severity_options_callback'
+    ),
+    'filter' => array(
+      'id' => 'in_operator',
+      'options callback' => 'dblog_views_severity_options_callback'
+    ),
+
+  );
+
+  $data['watchdog']['link'] = array(
+    'title' => t('Link'),
+    'help' => t('Link to view the result of the event.'),
+    'field' => array(
+      'id' => 'standard',
+      'click sortable' => TRUE,
+    ),
+    'argument' => array(
+      'id' => 'string',
+    ),
+    'filter' => array(
+      'id' => 'string',
+    ),
+    'sort' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['location'] = array(
+    'title' => t('Location'),
+    'help' => t('URL of the origin of the event.'),
+    'field' => array(
+      'id' => 'standard',
+      'click sortable' => TRUE,
+    ),
+    'argument' => array(
+      'id' => 'string',
+    ),
+    'filter' => array(
+      'id' => 'string',
+    ),
+    'sort' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['referer'] = array(
+    'title' => t('Referer'),
+    'help' => t('URL of the previous page.'),
+    'field' => array(
+      'id' => 'standard',
+      'click sortable' => TRUE,
+    ),
+    'argument' => array(
+      'id' => 'string',
+    ),
+    'filter' => array(
+      'id' => 'string',
+    ),
+    'sort' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['hostname'] = array(
+    'title' => t('Hostname'),
+    'help' => t('Hostname of the user who triggered the event.'),
+    'field' => array(
+      'id' => 'standard',
+      'click sortable' => TRUE,
+    ),
+    'argument' => array(
+      'id' => 'string',
+    ),
+    'filter' => array(
+      'id' => 'string',
+    ),
+    'sort' => array(
+      'id' => 'standard',
+    ),
+  );
+
+  $data['watchdog']['timestamp'] = array(
+    'title' => t('Timestamp'),
+    'help' => t('Date when the event occurred.'),
+    'field' => array(
+      'id' => 'date',
+      'click sortable' => TRUE,
+    ),
+    'argument' => array(
+      'id' => 'date',
+    ),
+    'filter' => array(
+      'id' => 'date',
+    ),
+    'sort' => array(
+      'id' => 'date',
+    ),
+  );
+
+  return $data;
+}
diff --git a/core/modules/dblog/lib/Drupal/dblog/Plugin/views/field/DblogMessage.php b/core/modules/dblog/lib/Drupal/dblog/Plugin/views/field/DblogMessage.php
new file mode 100644
index 0000000..f674ef4
--- /dev/null
+++ b/core/modules/dblog/lib/Drupal/dblog/Plugin/views/field/DblogMessage.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\dblog\Plugin\views\field\DblogMessage.
+ */
+
+namespace Drupal\dblog\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\ViewExecutable;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+
+/**
+ * Provides a field handler that renders a log event with replaced variables.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @Plugin(
+ *   id = "dblog_message"
+ * )
+ */
+class DblogMessage extends FieldPluginBase {
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\field\FieldPluginBase::init().
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    if ($this->options['replace_variables']) {
+      $this->additional_fields[] = 'variables';
+    }
+  }
+
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\field\FieldPluginBase::defineOptions().
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['replace_variables'] = array('default' => TRUE, 'bool' => TRUE);
+
+    return $options;
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\field\FieldPluginBase::buildOptionsForm().
+   */
+  public function buildOptionsForm(&$form, &$form_state) {
+    parent::buildOptionsForm($form, $form_state);
+
+    $form['replace_variables'] = array(
+      '#title' => t('Replace variables'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->options['replace_variables'],
+    );
+  }
+
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\field\FieldPluginBase::FieldPluginBase().
+   */
+  function render($values) {
+    $value = $this->get_value($values);
+
+    if ($this->options['replace_variables']) {
+      $variables = unserialize($this->get_value($values, 'variables'));
+      return format_string($value, $variables);
+    }
+    else {
+      return $this->sanitizeValue($value);
+    }
+  }
+
+}
diff --git a/core/modules/dblog/lib/Drupal/dblog/Tests/Views/ViewsIntegrationTest.php b/core/modules/dblog/lib/Drupal/dblog/Tests/Views/ViewsIntegrationTest.php
new file mode 100644
index 0000000..d752239
--- /dev/null
+++ b/core/modules/dblog/lib/Drupal/dblog/Tests/Views/ViewsIntegrationTest.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\dblog\Tests\Views\ViewsIntegrationTest.
+ */
+
+namespace Drupal\dblog\Tests\Views;
+
+use Drupal\views\Tests\ViewUnitTestBase;
+use Drupal\views\Tests\ViewTestData;
+
+/**
+ * Tests the views integration of dblog module.
+ */
+class ViewsIntegrationTest extends ViewUnitTestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_dblog');
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('dblog', 'dblog_test_views', 'views');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Dblog Integration',
+      'description' => 'Tests the views integration of dblog module.',
+      'group' => 'Views Modules'
+    );
+  }
+
+  protected function setUp() {
+    parent::setUp();
+
+    ViewTestData::importTestViews(get_class($this), array('dblog_test_views'));
+  }
+
+  /**
+   * Tests the integration.
+   */
+  public function testIntegration() {
+    $entries = array();
+    $entries[] = array(
+      'message' => $this->randomName(),
+    );
+    foreach ($entries as $entry) {
+      $entry += array(
+        'type' => 'test-views',
+        'variables' => array(),
+      );
+      watchdog($entry['type'], $entry['message']);
+    }
+
+    $view = views_get_view('test_dblog');
+
+    $this->executeView($view);
+    debug($view->result);
+  }
+
+}
diff --git a/core/modules/dblog/tests/dblog_test_views/dblog_test_views.info b/core/modules/dblog/tests/dblog_test_views/dblog_test_views.info
new file mode 100644
index 0000000..56fb11f
--- /dev/null
+++ b/core/modules/dblog/tests/dblog_test_views/dblog_test_views.info
@@ -0,0 +1,8 @@
+name = Dblog test views
+description = Provides default views for views dblog tests.
+package = Testing
+version = VERSION
+core = 8.x
+dependencies[] = dblog
+dependencies[] = views
+hidden = TRUE
diff --git a/core/modules/dblog/tests/dblog_test_views/dblog_test_views.module b/core/modules/dblog/tests/dblog_test_views/dblog_test_views.module
new file mode 100644
index 0000000..b3d9bbc
--- /dev/null
+++ b/core/modules/dblog/tests/dblog_test_views/dblog_test_views.module
@@ -0,0 +1 @@
+<?php
diff --git a/core/modules/dblog/tests/dblog_test_views/test_views/views.view.test_dblog.yml b/core/modules/dblog/tests/dblog_test_views/test_views/views.view.test_dblog.yml
new file mode 100755
index 0000000..ff434e3
--- /dev/null
+++ b/core/modules/dblog/tests/dblog_test_views/test_views/views.view.test_dblog.yml
@@ -0,0 +1,90 @@
+api_version: '3.0'
+base_field: wid
+base_table: watchdog
+core: 8.x
+description: ''
+disabled: '0'
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: ''
+    display_options:
+      access:
+        type: none
+      cache:
+        type: none
+      query:
+        type: views_query
+      exposed_form:
+        type: basic
+      pager:
+        type: full
+      style:
+        type: default
+      row:
+        type: fields
+      fields:
+        hostname:
+          id: hostname
+          table: watchdog
+          field: hostname
+        link:
+          id: link
+          table: watchdog
+          field: link
+        location:
+          id: location
+          table: watchdog
+          field: location
+        message:
+          id: message
+          table: watchdog
+          field: message
+        referer:
+          id: referer
+          table: watchdog
+          field: referer
+        severity:
+          id: severity
+          table: watchdog
+          field: severity
+        timestamp:
+          id: timestamp
+          table: watchdog
+          field: timestamp
+        type:
+          id: type
+          table: watchdog
+          field: type
+        uid:
+          id: uid
+          table: watchdog
+          field: uid
+        variables:
+          id: variables
+          table: watchdog
+          field: variables
+        wid:
+          id: wid
+          table: watchdog
+          field: wid
+      filters: {  }
+      sorts:
+        wid:
+          id: wid
+          table: watchdog
+          field: wid
+          order: ASC
+  page_1:
+    display_plugin: page
+    id: page_1
+    display_title: Page
+    position: ''
+    display_options:
+      path: test-path
+human_name: test_dblog
+module: views
+name: test_dblog
+tag: ''
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
index 793c8c0..40795c6 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
@@ -105,6 +105,7 @@ protected function setUp() {
       }
       $class = get_parent_class($class);
     }
+    debug($modules);
     $this->enableModules($modules, FALSE);
   }
 
