[1mdiff --git a/modules/dblog/dblog.install b/modules/dblog/dblog.install[m
[1mindex 759c7bc..1747a1d 100644[m
[1m--- a/modules/dblog/dblog.install[m
[1m+++ b/modules/dblog/dblog.install[m
[36m@@ -84,6 +84,7 @@[m [mfunction dblog_schema() {[m
     'primary key' => array('wid'),[m
     'indexes' => array([m
       'type' => array('type'),[m
[32m+[m[32m      'severity' => array('severity'),[m
       'uid' => array('uid'),[m
     ),[m
   );[m
[36m@@ -96,14 +97,12 @@[m [mfunction dblog_schema() {[m
  */[m
 function dblog_uninstall() {[m
   variable_del('dblog_row_limit');[m
[32m+[m[32m  variable_del('dblog_allowed_severity');[m
[32m+[m[32m  variable_del('dblog_allowed_types');[m
[32m+[m[32m  variable_del('dblog_known_types');[m
 }[m
 [m
 /**[m
[31m- * @addtogroup updates-6.x-to-7.x[m
[31m- * @{[m
[31m- */[m
[31m-[m
[31m-/**[m
  * Update the {watchdog} table.[m
  */[m
 function dblog_update_7001() {[m
[36m@@ -140,3 +139,10 @@[m [mfunction dblog_update_7001() {[m
 /**[m
  * @} End of "addtogroup updates-6.x-to-7.x"[m
  */[m
[32m+[m
[32m+[m[32m/**[m
[32m+[m[32m * Implements hook_update_N().[m
[32m+[m[32m */[m
[32m+[m[32mfunction dblog_update_7101() {[m
[32m+[m[32m  db_add_index('dblog', 'severity', array('severity'));[m
[32m+[m[32m}[m
\ No newline at end of file[m
[1mdiff --git a/modules/dblog/dblog.module b/modules/dblog/dblog.module[m
[1mindex 496a043..ec2b0d0 100644[m
[1m--- a/modules/dblog/dblog.module[m
[1m+++ b/modules/dblog/dblog.module[m
[36m@@ -138,13 +138,44 @@[m [mfunction _dblog_get_message_types() {[m
  * Note some values may be truncated for database column size restrictions.[m
  */[m
 function dblog_watchdog(array $log_entry) {[m
[32m+[m[41m  [m
[32m+[m[32m  // Ensure the type is trimmed to fit in the db column[m
[32m+[m[32m  $type = substr($log_entry['type'], 0, 64);[m
[32m+[m[41m  [m
[32m+[m[32m  // Check the severity filter to see if this message is allowed[m
[32m+[m[32m  $allowed_severity = variable_get('dblog_allowed_severities', array(0,1,2,3,4,5,6,7));[m
[32m+[m[32m  if (!in_array($log_entry['severity'], $allowed_severity)) {[m
[32m+[m[32m    return FALSE;[m
[32m+[m[32m  }[m
[32m+[m[41m  [m
[32m+[m[32m  // Load up the known types as well as the allowed types[m
[32m+[m[32m  $known_types = variable_get('dblog_known_types', array());[m
[32m+[m[32m  $allowed_types = variable_get('dblog_allowed_types', array());[m
[32m+[m[41m  [m
[32m+[m[32m  // If this is a new type, we allow it and we add it to the lists[m
[32m+[m[32m  if (!in_array($type, $known_types)) {[m
[32m+[m[41m    [m
[32m+[m[32m    // Add to our known types list.[m
[32m+[m[32m    $known_types[$type] = $type;[m[41m [m
[32m+[m[32m    variable_set('dblog_known_types', $known_types);[m
[32m+[m[41m    [m
[32m+[m[32m    // New types are allowed by default.[m
[32m+[m[32m    $allowed_types[] = $type;[m
[32m+[m[32m    variable_set('dblog_allowed_types', $allowed_types);[m
[32m+[m[32m  }[m
[32m+[m
[32m+[m[32m  // If this is not an allowed type we don't log it[m
[32m+[m[32m  if (!in_array($type, $allowed_types)) {[m
[32m+[m[32m    return FALSE;[m
[32m+[m[32m  }[m
[32m+[m[41m  [m
   // The user object may not exist in all conditions, so 0 is substituted if needed.[m
   $user_uid = isset($log_entry['user']->uid) ? $log_entry['user']->uid : 0;[m
 [m
   Database::getConnection('default', 'default')->insert('watchdog')[m
     ->fields(array([m
       'uid' => $user_uid,[m
[31m-      'type' => substr($log_entry['type'], 0, 64),[m
[32m+[m[32m      'type' => $type,[m
       'message' => $log_entry['message'],[m
       'variables' => serialize($log_entry['variables']),[m
       'severity' => $log_entry['severity'],[m
[36m@@ -160,7 +191,7 @@[m [mfunction dblog_watchdog(array $log_entry) {[m
 /**[m
  * Implements hook_form_FORM_ID_alter().[m
  */[m
[31m-function dblog_form_system_logging_settings_alter(&$form, $form_state) {[m
[32m+[m[32mfunction dblog_form_system_logging_settings_alter(&$form, $form_state) {[m[41m  [m
   $form['dblog_row_limit'] = array([m
     '#type' => 'select',[m
     '#title' => t('Database log messages to keep'),[m
[36m@@ -168,6 +199,22 @@[m [mfunction dblog_form_system_logging_settings_alter(&$form, $form_state) {[m
     '#options' => array(0 => t('All')) + drupal_map_assoc(array(100, 1000, 10000, 100000, 1000000)),[m
     '#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')))[m
   );[m
[32m+[m[32m  $form['dblog_allowed_types'] = array([m
[32m+[m[32m    '#type' => 'select',[m
[32m+[m[32m    '#multiple' => TRUE,[m
[32m+[m[32m    '#title' => t('Allowed message types'),[m
[32m+[m[32m    '#default_value' => array_values(variable_get('dblog_allowed_types', array())),[m
[32m+[m[32m    '#options' => variable_get('dblog_known_types', array()),[m
[32m+[m[32m    '#description' => t('The message types which will be logged. Any new message types will be logged unless they are deselected.')[m
[32m+[m[32m  );[m
[32m+[m[32m  $form['dblog_allowed_severities'] = array([m
[32m+[m[32m    '#type' => 'select',[m
[32m+[m[32m    '#multiple' => TRUE,[m
[32m+[m[32m    '#title' => t('Allowed message severities'),[m
[32m+[m[32m    '#default_value' => variable_get('dblog_allowed_severities', array(0,1,2,3,4,5,6,7)),[m
[32m+[m[32m    '#options' => watchdog_severity_levels(),[m
[32m+[m[32m    '#description' => t('Severities that will be logged. Deselect lower level severities to decrease database load.')[m
[32m+[m[32m  );[m
   $form['actions']['#weight'] = 1;[m
 }[m
 [m
