/** * @author David Grudl * @see https://github.com/nette/tracy */ protected function logException(Throwable $exception) : array { $file = $this->getExceptionFile($exception); if ($handle = @fopen($file, 'x')) { // @ file may already exist ob_start(); // double buffer prevents sending HTTP headers in some PHP ob_start(function ($buffer) use($handle) { fwrite($handle, $buffer); }, 4096); $this->blueScreen->render($exception); ob_end_flush(); ob_end_clean(); fclose($handle); return [true, $file]; } else { return [false, $file]; } }
public static function onException($exception) { ob_start(); // double buffer prevents sending HTTP headers in some PHP ob_start(); $bs = new BlueScreen(); $bs->render($exception); $report = ob_get_contents(); ob_end_clean(); ob_end_clean(); self::saveReport($exception->getMessage(), $report); }
/** * Renders blue screen. * * @param \Exception|\Throwable * * @return void */ public function render($exception) { if (isset($this->sslAuthorizedDn['emailAddress']) && !in_array($this->sslAuthorizedDn['emailAddress'], $this->logIgnoreEmail) && in_array($this->siteMode, ['public', 'ssd'])) { if ($exception instanceof \ErrorException) { $severity = $exception->getSeverity(); Debugger::getLogger()->log($exception, ($severity & Debugger::$logSeverity) === $severity ? Tracy\ILogger::ERROR : Tracy\ILogger::EXCEPTION); } else { Debugger::getLogger()->log($exception, Tracy\ILogger::EXCEPTION); } } parent::render($exception); }