config = $config; $this->injectableFactory = $injectableFactory; } public function load(): Log { $log = new Log('Espo'); $handlerDataList = $this->config->get('logger.handlerList') ?? null; if ($handlerDataList) { $level = $this->config->get('logger.level'); $loader = $this->injectableFactory->create(HandlerListLoader::class); $handlerList = $loader->load($handlerDataList, $level); } else { $handler = $this->createDefaultHandler(); $handlerList = [$handler]; } foreach ($handlerList as $handler) { $log->pushHandler($handler); } $errorHandler = new MonologErrorHandler($log); $errorHandler->registerExceptionHandler(null, false); $errorHandler->registerErrorHandler([], false); return $log; } protected function createDefaultHandler(): HandlerInterface { $path = $this->config->get('logger.path') ?? self::PATH; $rotation = $this->config->get('logger.rotation') ?? true; $level = $this->config->get('logger.level') ?? self::DEFAULT_LEVEL; $levelCode = Logger::toMonologLevel($level); if ($rotation) { $maxFileNumber = $this->config->get('logger.maxFileNumber') ?? self::MAX_FILE_NUMBER; $handler = new EspoRotatingFileHandler($this->config, $path, $maxFileNumber, $levelCode, true); } else { $handler = new EspoFileHandler($this->config, $path, $levelCode, true); } $formatter = new LineFormatter( self::LINE_FORMAT, self::DATE_FORMAT ); $handler->setFormatter($formatter); return $handler; } }