View source
<?php
define('WATCHDOG_FILTERING_EXCLUDE', 'exclude');
define('WATCHDOG_FILTERING_INCLUDE', 'include');
define('WATCHDOG_FILTERING_IGNORE', 'ignore');
function watchdog_filtering_menu() {
$items = array();
$items['admin/settings/logging/general'] = array(
'title' => 'Logging and errors',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -10,
);
$items['admin/settings/logging/filtering'] = array(
'title' => 'Filtering',
'description' => 'Watchdog Filtering settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'watchdog_filtering_settings_form',
),
'access arguments' => array(
'administer site configuration',
),
'type' => MENU_LOCAL_TASK,
'file' => 'watchdog_filtering.admin.inc',
);
return $items;
}
function watchdog_filtering_module_implements_alter(&$implementations, $hook) {
static $has_run = FALSE;
if ($has_run) {
return;
}
if ($hook == 'watchdog') {
$has_run = TRUE;
foreach ($implementations[$hook] as $idx => $module) {
if ($module == 'watchdog_filtering') {
unset($implementations[$hook][$idx]);
continue;
}
module_load_include('inc', $module);
if (!function_exists($module . '_' . $hook)) {
unset($implementations[$hook][$idx]);
}
}
$watchdog_filtering_implementations =& drupal_static('watchdog_filtering_implementations', array());
$watchdog_filtering_implementations = array_values($implementations[$hook]);
$implementations[$hook] = array(
'watchdog_filtering',
);
}
}
function _watchdog_filtering_get_levels() {
global $conf;
$levels = array();
foreach ($conf as $key => $value) {
if (preg_match('/^watchdog_filtering_severity_(.*)$/', $key, $matches)) {
$levels[$matches[1]] = $value;
}
}
return $levels;
}
function watchdog_filtering_invoke_filtering($log_entry) {
$unique =& drupal_static('watchdog_filtering_unique', array());
if (variable_get('watchdog_filtering_deduplicate', FALSE)) {
$key = md5(serialize($log_entry));
if (isset($unique[$key])) {
return WATCHDOG_FILTERING_EXCLUDE;
}
$unique[$key] = TRUE;
}
$type = rawurlencode($log_entry['type']);
$severity = variable_get('watchdog_filtering_severity_' . $type, NULL);
if (!isset($severity)) {
$severity = FALSE;
variable_set('watchdog_filtering_severity_' . $type, $severity);
}
if ($severity === FALSE) {
$severity = variable_get('watchdog_filtering_default_severity', array_keys(watchdog_severity_levels()));
}
$status = module_invoke_all('watchdog_filtering', $log_entry);
if (in_array(WATCHDOG_FILTERING_EXCLUDE, $status, TRUE)) {
return WATCHDOG_FILTERING_EXCLUDE;
}
elseif (in_array(WATCHDOG_FILTERING_INCLUDE, $status, TRUE)) {
return WATCHDOG_FILTERING_INCLUDE;
}
if (in_array($log_entry['severity'], $severity)) {
return WATCHDOG_FILTERING_INCLUDE;
}
else {
return WATCHDOG_FILTERING_EXCLUDE;
}
}
function watchdog_filtering_watchdog(array $log_entry) {
if (watchdog_filtering_invoke_filtering($log_entry) === WATCHDOG_FILTERING_EXCLUDE) {
return;
}
$implementations = drupal_static('watchdog_filtering_implementations', array());
$return = array();
foreach ($implementations as $module) {
$function = $module . '_watchdog';
if (function_exists($function)) {
call_user_func($function, $log_entry);
}
}
return $return;
}