setTimezone($loggerTimeZone); $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); $logger->pushProcessor(new Monolog\Processor\UidProcessor()); $logger->pushProcessor(new IntrospectionProcessor($data['introspection'], LogLevel::DEBUG)); $stream = DI::config()->get('system', 'logfile'); // just add a stream in case it's either writable or not file if (!is_file($stream) || is_writable($stream)) { try { $loglevel = Monolog\Logger::toMonologLevel($data['loglevel']); // fallback to notice if an invalid loglevel is set if (!is_int($loglevel)) { $loglevel = LogLevel::NOTICE; } $fileHandler = new Monolog\Handler\StreamHandler($stream, $loglevel); $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n"); $fileHandler->setFormatter($formatter); $logger->pushHandler($fileHandler); } catch (\Throwable $e) { return; } } $data['storage'] = $logger; }