| 
<?php
 use CodeIgniter\CLI\CLI;
 
 // The main Exception
 CLI::newLine();
 CLI::write('[' . get_class($exception) . ']', 'light_gray', 'red');
 CLI::newLine();
 CLI::write($message);
 CLI::newLine();
 CLI::write('at ' . CLI::color(clean_path($exception->getFile()) . ':' . $exception->getLine(), 'green'));
 CLI::newLine();
 
 // The backtrace
 if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE)
 {
 $backtraces = $exception->getTrace();
 
 if ($backtraces)
 {
 CLI::write('Backtrace:', 'green');
 }
 
 foreach ($backtraces as $i => $error)
 {
 $padFile  = '    '; // 4 spaces
 $padClass = '       '; // 7 spaces
 $c        = str_pad($i + 1, 3, ' ', STR_PAD_LEFT);
 
 if (isset($error['file']))
 {
 $filepath = clean_path($error['file']) . ':' . $error['line'];
 
 CLI::write($c . $padFile . CLI::color($filepath, 'yellow'));
 }
 else
 {
 CLI::write($c . $padFile . CLI::color('[internal function]', 'yellow'));
 }
 
 $function = '';
 
 if (isset($error['class']))
 {
 $type = ($error['type'] === '->') ? '()' . $error['type'] : $error['type'];
 $function .= $padClass . $error['class'] . $type . $error['function'];
 }
 elseif (! isset($error['class']) && isset($error['function']))
 {
 $function .= $padClass . $error['function'];
 }
 
 $args = implode(', ', array_map(function ($value) {
 switch (true)
 {
 case is_object($value):
 return 'Object(' . get_class($value) . ')';
 case is_array($value):
 return count($value) ? '[...]' : '[]';
 case is_null($value):
 return 'null'; // return the lowercased version
 default:
 return var_export($value, true);
 }
 }, array_values($error['args'] ?? [])));
 
 $function .= '(' . $args . ')';
 
 CLI::write($function);
 CLI::newLine();
 }
 }
 
 |