protected static function flattenExceptionBacktrace(Exception $exception) { $traceProperty = (new \ReflectionClass('Exception'))->getProperty('trace'); $traceProperty->setAccessible(true); do { $trace = $traceProperty->getValue($exception); foreach($trace as &$call) { foreach($call['args'] as $key => $value) { if ($value instanceof \Closure) { $call['args'][$key] = '(Closure)'; } elseif (is_object($value) && !method_exists($value, '__toString')) { $call['args'][$key] = sprintf('object(%s)', get_class($value)); } elseif (is_resource($value)) { $call['args'][$key] = sprintf('resource(%s)', get_resource_type($value)); } } } $traceProperty->setValue($exception, $trace); } while($exception = $exception->getPrevious()); $traceProperty->setAccessible(false); }