static function processException(Exception $exception, $outputAllowed = FALSE) { if (!self::$enabled) { return; } elseif (self::$logFile) { try { $hash = md5($exception . (method_exists($exception, 'getPrevious') ? $exception->getPrevious() : (isset($exception->previous) ? $exception->previous : ''))); self::log("PHP Fatal error: Uncaught " . str_replace("Stack trace:\n" . $exception->getTraceAsString(), '', $exception)); foreach (new DirectoryIterator(dirname(self::$logFile)) as $entry) { if (strpos($entry, $hash)) { $skip = TRUE; break; } } $file = dirname(self::$logFile) . "/exception " . @date('Y-m-d H-i-s') . " {$hash}.html"; if (empty($skip) && (self::$logHandle = @fopen($file, 'w'))) { ob_start(); ob_start(array(__CLASS__, '_writeFile'), 1); self::_paintBlueScreen($exception); ob_end_flush(); ob_end_clean(); fclose(self::$logHandle); } if (self::$sendEmails) { self::sendEmail((string) $exception); } } catch (Exception $e) { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } echo 'NDebug fatal error: ', get_class($e), ': ', ($e->getCode() ? '#' . $e->getCode() . ' ' : '') . $e->getMessage(), "\n"; exit; } } elseif (self::$productionMode) { } elseif (self::$consoleMode) { if ($outputAllowed) { echo "{$exception}\n"; } } elseif (self::$firebugDetected && self::$ajaxDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } elseif ($outputAllowed) { if (!headers_sent()) { @ob_end_clean(); while (ob_get_level() && @ob_end_clean()) { } if (in_array('Content-Encoding: gzip', headers_list())) { header('Content-Encoding: identity', TRUE); } } self::_paintBlueScreen($exception); } elseif (self::$firebugDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } foreach (self::$onFatalError as $handler) { call_user_func($handler, $exception); } }
public static function log($message, $priority = self::INFO) { if (!self::$logFile) { return; } if ($message instanceof Exception) { $exception = $message; $message = "PHP Fatal error: " . ($message instanceof FatalErrorException ? $exception->getMessage() : "Uncaught exception " . get_class($exception) . " with message '" . $exception->getMessage() . "'") . " in " . $exception->getFile() . ":" . $exception->getLine(); } error_log(@date('[Y-m-d H-i-s] ') . trim($message) . (self::$source ? ' @ ' . self::$source : '') . PHP_EOL, 3, self::$logFile); if ($priority === self::ERROR && self::$sendEmails && @filemtime(self::$logFile . '.email-sent') + self::$emailSnooze < time() && @file_put_contents(self::$logFile . '.email-sent', 'sent')) { call_user_func(self::$mailer, $message); } if (isset($exception)) { $hash = md5($exception . (method_exists($exception, 'getPrevious') ? $exception->getPrevious() : (isset($exception->previous) ? $exception->previous : ''))); foreach (new DirectoryIterator(dirname(self::$logFile)) as $entry) { if (strpos($entry, $hash)) { $skip = TRUE; break; } } if (empty($skip) && (self::$logHandle = @fopen(dirname(self::$logFile) . "/exception " . @date('Y-m-d H-i-s') . " {$hash}.html", 'w'))) { ob_start(); ob_start(array(__CLASS__, '_writeFile'), 1); self::paintBlueScreen($exception); ob_end_flush(); ob_end_clean(); fclose(self::$logHandle); } } }
static function processException(Exception $exception, $outputAllowed = FALSE) { if (!self::$enabled) { return; } elseif (self::$logFile) { try { $hash = md5($exception . (method_exists($exception, 'getPrevious') ? $exception->getPrevious() : (isset($exception->previous) ? $exception->previous : ''))); error_log("PHP Fatal error: Uncaught {$exception}"); foreach (new DirectoryIterator(dirname(self::$logFile)) as $entry) { if (strpos($entry, $hash)) { $skip = TRUE; break; } } $file = dirname(self::$logFile) . "/exception " . @date('Y-m-d H-i-s') . " {$hash}.html"; if (empty($skip) && (self::$logHandle = @fopen($file, 'x'))) { ob_start(); ob_start(array(__CLASS__, '_writeFile'), 1); self::_paintBlueScreen($exception); ob_end_flush(); ob_end_clean(); fclose(self::$logHandle); } if (self::$sendEmails) { self::sendEmail((string) $exception); } } catch (Exception $e) { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } echo 'NDebug fatal error: ', get_class($e), ': ', ($e->getCode() ? '#' . $e->getCode() . ' ' : '') . $e->getMessage(), "\n"; exit; } } elseif (self::$productionMode) { } elseif (self::$consoleMode) { if ($outputAllowed) { echo "{$exception}\n"; foreach (self::$colophons as $callback) { foreach ((array) call_user_func($callback, 'bluescreen') as $line) { echo strip_tags($line) . "\n"; } } } } elseif (self::$firebugDetected && self::$ajaxDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } elseif ($outputAllowed) { self::_paintBlueScreen($exception); } elseif (self::$firebugDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } foreach (self::$onFatalError as $handler) { call_user_func($handler, $exception); } }