0, 'DEBUG' => 1, 'INFO' => 2, 'WARNING' => 3, 'ERROR' => 4, 'FATAL' => 5, ); function logging($level, $message) { global $log_file, $_log_file_fd, $_log_levels, $log_level, $argv; if (!array_key_exists($level, $_log_levels)) $level = 'INFO'; $level_id = $_log_levels[$level]; if (!array_key_exists($log_level, $_log_levels)) $log_level = 'INFO'; $log_level_id = $_log_levels[$log_level]; if ($level_id < $log_level_id) return true; if(is_null($_log_file_fd)) { $_log_file_fd = fopen($log_file, 'a'); } if (php_sapi_name() == "cli") { $msg=date('Y/m/d H:i:s').' - '.basename($argv[0])." - $level - $message\n"; } else { // With auth enabled // global $auth_user; // $msg=date('Y/m/d H:i:s').' - '.$_SERVER['REQUEST_URI'].' - '.$_SERVER['REMOTE_ADDR']." - $auth_user - $level - $message\n"; $msg=date('Y/m/d H:i:s').' - '.$_SERVER['REQUEST_URI'].' - '.$_SERVER['REMOTE_ADDR']." - $level - $message\n"; } fwrite($_log_file_fd , $msg); if ($level == 'FATAL') if (function_exists('fatal_error')) fatal_error($message); else die("\n$message\n\n"); elseif (php_sapi_name() == "cli") echo $msg; return true; } function change_log_file($file) { global $log_file, $_log_file_fd; if ($file == $log_file) return True; if ($_log_file_fd) { fclose($_log_file_fd); $_log_file_fd = false; } $log_file = $file; return True; } // Handle exception logging function get_debug_backtrace_context($ignore_last=0) { $traces = debug_backtrace(); // Also ignore this function it self $ignore_last++; if (!is_array($traces) || count($traces) <= $ignore_last) return ""; $msg = array(); for ($i=$ignore_last; $i < count($traces); $i++) { $trace = array("#$i"); if (isset($traces[$i]['file'])) $trace[] = $traces[$i]['file'].(isset($traces[$i]['line'])?":".$traces[$i]['line']:""); if (isset($traces[$i]['class']) && isset($traces[$i]['function'])) $trace[] = $traces[$i]['class'] . " " . $traces[$i]['type'] . " " . $traces[$i]['function']. "()"; elseif (isset($traces[$i]['function'])) $trace[] = $traces[$i]['function']. "()"; $msg[] = implode(" - ", $trace); } return implode("\n", $msg); } function log_exception($exception, $prefix='') { logging("ERROR", ($prefix?"$prefix :\n":"An exception occured :\n"). get_debug_backtrace_context(1). "\n" . "## ".$exception->getFile().":".$exception->getLine(). " : ". $exception->getMessage()); } set_exception_handler('log_exception'); // Handle PHP error logging function log_php_eror($errno, $errstr, $errfile, $errline) { logging("ERROR", "A PHP error occured : [$errno] $errstr\nFile : $errfile (line : $errline)"); return False; } if ($log_level == 'DEBUG') set_error_handler('log_php_eror', E_ALL & ~E_STRICT); else set_error_handler('log_php_eror', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);