protected static function initializeExceptionStorage(Bootstrap $bootstrap): ThrowableStorageInterface
    {
        $configurationManager = $bootstrap->getEarlyInstance(ConfigurationManager::class);
        $settings = $configurationManager->getConfiguration(ConfigurationManager::CONFIGURATION_TYPE_SETTINGS, 'Neos.Flow');

        $storageClassName = $settings['log']['throwables']['storageClass'] ?? FileStorage::class;
        $storageOptions = $settings['log']['throwables']['optionsByImplementation'][$storageClassName] ?? [];


        if (!in_array(ThrowableStorageInterface::class, class_implements($storageClassName, true))) {
            throw new \Exception(
                sprintf('The class "%s" configured as throwable storage does not implement the ThrowableStorageInterface', $storageClassName),
                1540583485
            );
        }

        /** @var ThrowableStorageInterface $throwableStorage */
        $throwableStorage = $storageClassName::createWithOptions($storageOptions);

        $throwableStorage->setBacktraceRenderer(function ($backtrace) {
            return Debugger::getBacktraceCode($backtrace, false, true);
        });

        $throwableStorage->setRequestInformationRenderer(function () {
            $output = '';
            if (!(Bootstrap::$staticObjectManager instanceof ObjectManagerInterface)) {
                return $output;
            }

            $bootstrap = Bootstrap::$staticObjectManager->get(Bootstrap::class);
            /* @var Bootstrap $bootstrap */
            $requestHandler = $bootstrap->getActiveRequestHandler();
            if (!$requestHandler instanceof HttpRequestHandlerInterface) {
                return $output;
            }

            $request = $requestHandler->getHttpRequest();
            $response = $requestHandler->getHttpResponse();
            $output .= PHP_EOL . 'HTTP REQUEST:' . PHP_EOL . ($request == '' ? '[request was empty]' : $request) . PHP_EOL;
            $output .= PHP_EOL . 'HTTP RESPONSE:' . PHP_EOL . ($response == '' ? '[response was empty]' : $response) . PHP_EOL;
            $output .= PHP_EOL . 'PHP PROCESS:' . PHP_EOL . 'Inode: ' . getmyinode() . PHP_EOL . 'PID: ' . getmypid() . PHP_EOL . 'UID: ' . getmyuid() . PHP_EOL . 'GID: ' . getmygid() . PHP_EOL . 'User: ' . get_current_user() . PHP_EOL;

            return $output;
        });

        return $throwableStorage;
    }
protected static function initializeExceptionStorage(Bootstrap $bootstrap): ThrowableStorageInterface
    {
        $configurationManager = $bootstrap->getEarlyInstance(ConfigurationManager::class);
        $settings = $configurationManager->getConfiguration(ConfigurationManager::CONFIGURATION_TYPE_SETTINGS, 'Neos.Flow');

        $storageClassName = $settings['log']['throwables']['storageClass'] ?? FileStorage::class;
        $storageOptions = $settings['log']['throwables']['optionsByImplementation'][$storageClassName] ?? [];


        if (!in_array(ThrowableStorageInterface::class, class_implements($storageClassName, true))) {
            throw new \Exception(
                sprintf('The class "%s" configured as throwable storage does not implement the ThrowableStorageInterface', $storageClassName),
                1540583485
            );
        }

        /** @var ThrowableStorageInterface $throwableStorage */
        $throwableStorage = $storageClassName::createWithOptions($storageOptions);

        $throwableStorage->setBacktraceRenderer(function ($backtrace) {
            return Debugger::getBacktraceCode($backtrace, false, true);
        });

        $throwableStorage->setRequestInformationRenderer(function () {
            $output = '';
            if (!(Bootstrap::$staticObjectManager instanceof ObjectManagerInterface)) {
                return $output;
            }

            $bootstrap = Bootstrap::$staticObjectManager->get(Bootstrap::class);
            /* @var Bootstrap $bootstrap */
            $requestHandler = $bootstrap->getActiveRequestHandler();
            if (!$requestHandler instanceof HttpRequestHandlerInterface) {
                return $output;
            }

            $request = $requestHandler->getHttpRequest();
            $response = $requestHandler->getHttpResponse();
            $output .= PHP_EOL . 'HTTP REQUEST:' . PHP_EOL . ($request == '' ? '[request was empty]' : $request) . PHP_EOL;
            $output .= PHP_EOL . 'HTTP RESPONSE:' . PHP_EOL . ($response == '' ? '[response was empty]' : $response) . PHP_EOL;
            $output .= PHP_EOL . 'PHP PROCESS:' . PHP_EOL . 'Inode: ' . getmyinode() . PHP_EOL . 'PID: ' . getmypid() . PHP_EOL . 'UID: ' . getmyuid() . PHP_EOL . 'GID: ' . getmygid() . PHP_EOL . 'User: ' . get_current_user() . PHP_EOL;

            return $output;
        });

        return $throwableStorage;
    }
protected static function initializeExceptionStorage ( Bootstrap $ bootstrap ) : ThrowableStorageInterface { $ configurationManager = $ bootstrap -> getEarlyInstance ( ConfigurationManager :: class ) ; $ settings = $ configurationManager -> getConfiguration ( ConfigurationManager :: CONFIGURATION_TYPE_SETTINGS , 'Neos.Flow' ) ; $ storageClassName = $ settings [ 'log' ] [ 'throwables' ] [ 'storageClass' ] ?? FileStorage :: class ; $ storageOptions = $ settings [ 'log' ] [ 'throwables' ] [ 'optionsByImplementation' ] [ $ storageClassName ] ?? [ ] ; if ( ! in_array ( ThrowableStorageInterface :: class , class_implements ( $ storageClassName , true ) ) ) { throw new \ Exception ( sprintf ( 'The class "%s" configured as throwable storage does not implement the ThrowableStorageInterface' , $ storageClassName ) , 1540583485 ) ; } /** @var ThrowableStorageInterface $throwableStorage */ $ throwableStorage = $ storageClassName :: createWithOptions ( $ storageOptions ) ; $ throwableStorage -> setBacktraceRenderer ( function ( $ backtrace ) { return Debugger :: getBacktraceCode ( $ backtrace , false , true ) ; } ) ; $ throwableStorage -> setRequestInformationRenderer ( function ( ) { $ output = '' ; if ( ! ( Bootstrap :: $ staticObjectManager instanceof ObjectManagerInterface ) ) { return $ output ; } $ bootstrap = Bootstrap :: $ staticObjectManager -> get ( Bootstrap :: class ) ; /* @var Bootstrap $bootstrap */ $ requestHandler = $ bootstrap -> getActiveRequestHandler ( ) ; if ( ! $ requestHandler instanceof HttpRequestHandlerInterface ) { return $ output ; } $ request = $ requestHandler -> getHttpRequest ( ) ; $ response = $ requestHandler -> getHttpResponse ( ) ; $ output .= PHP_EOL . 'HTTP REQUEST:' . PHP_EOL . ( $ request == '' ? '[request was empty]' : $ request ) . PHP_EOL ; $ output .= PHP_EOL . 'HTTP RESPONSE:' . PHP_EOL . ( $ response == '' ? '[response was empty]' : $ response ) . PHP_EOL ; $ output .= PHP_EOL . 'PHP PROCESS:' . PHP_EOL . 'Inode: ' . getmyinode ( ) . PHP_EOL . 'PID: ' . getmypid ( ) . PHP_EOL . 'UID: ' . getmyuid ( ) . PHP_EOL . 'GID: ' . getmygid ( ) . PHP_EOL . 'User: ' . get_current_user ( ) . PHP_EOL ; return $ output ; } ) ; return $ throwableStorage ; }
Initialize the exception storage

@param Bootstrap $bootstrap
@return ThrowableStorageInterface
@throws FlowException
@throws \Neos\Flow\Configuration\Exception\InvalidConfigurationTypeException
Initialize the exception storage