mirror of
https://github.com/daledavies/jump.git
synced 2026-02-26 16:20:47 +01:00
Improve error handling and add detailed debugging option
This commit is contained in:
66
jumpapp/classes/Debugger/ErrorLogger.php
Normal file
66
jumpapp/classes/Debugger/ErrorLogger.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* ██ ██ ██ ███ ███ ██████
|
||||
* ██ ██ ██ ████ ████ ██ ██
|
||||
* ██ ██ ██ ██ ████ ██ ██████
|
||||
* ██ ██ ██ ██ ██ ██ ██ ██
|
||||
* █████ ██████ ██ ██ ██
|
||||
*
|
||||
* @author Dale Davies <dale@daledavies.co.uk>
|
||||
* @copyright Copyright (c) 2023, Dale Davies
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
namespace Jump\Debugger;
|
||||
|
||||
class ErrorLogger implements \Tracy\ILogger {
|
||||
public function log($message, $priority = self::INFO): void {
|
||||
$logmessage = $this->format_message($message) . PHP_EOL;
|
||||
$logmessage .= $this->format_backtrace($message->getTrace(), true) . PHP_EOL;
|
||||
error_log($logmessage);
|
||||
}
|
||||
|
||||
public static function format_message($message): string {
|
||||
if ($message instanceof \Throwable) {
|
||||
foreach (\Tracy\Helpers::getExceptionChain($message) as $exception) {
|
||||
$tmp[] = ($exception instanceof \ErrorException
|
||||
? \Tracy\Helpers::errorTypeToString($exception->getSeverity()) . ': ' . $exception->getMessage()
|
||||
: get_debug_type($exception) . ': ' . $exception->getMessage() . ($exception->getCode() ? ' #' . $exception->getCode() : '')
|
||||
);
|
||||
}
|
||||
$message = implode("\ncaused by ", $tmp);
|
||||
} elseif (!is_string($message)) {
|
||||
$message = \Tracy\Dumper::toText($message);
|
||||
}
|
||||
return trim($message);
|
||||
}
|
||||
|
||||
public function format_backtrace($callers) {
|
||||
if (empty($callers)) {
|
||||
return '';
|
||||
}
|
||||
$from = '';
|
||||
foreach ($callers as $caller) {
|
||||
if (!isset($caller['line'])) {
|
||||
$caller['line'] = '?'; // probably call_user_func()
|
||||
}
|
||||
if (!isset($caller['file'])) {
|
||||
$caller['file'] = 'unknownfile'; // probably call_user_func()
|
||||
}
|
||||
$from .= '* ';
|
||||
$from .= 'line ' . $caller['line'] . ' of ' . str_replace(dirname(__DIR__), '', $caller['file']);
|
||||
if (isset($caller['function'])) {
|
||||
$from .= ': call to ';
|
||||
if (isset($caller['class'])) {
|
||||
$from .= $caller['class'] . $caller['type'];
|
||||
}
|
||||
$from .= $caller['function'] . '()';
|
||||
} else if (isset($caller['exception'])) {
|
||||
$from .= ': '.$caller['exception'].' thrown';
|
||||
}
|
||||
$from .= PHP_EOL;
|
||||
}
|
||||
$from .= '';
|
||||
return $from;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user