setLogger($logger) ->setFolder($folder); } protected LoggerInterface $logger; protected string $folder; public function getLogger(): LoggerInterface { return $this->logger; } public function getFolder(): string { return $this->folder; } public function setLogger(LoggerInterface $logger): Logs { $this->logger = $logger; return $this; } public function setFolder(string $folder): Logs { $this->folder = $folder; return $this; } public function getFiles(): array { $files = new FilesystemIterator($this->getFolder()); $output = []; foreach ($files as $file) { if ($file->isDir()) { continue; } $output []= $file; } return $output; } public function getParser(string $filename): Parser { $map = [ Parsers\Access::class => '/(access.log)/', Parsers\Error::class => '/(error.log)/', Parsers\Debug::class => '/(debug.log)/', Parsers\Monolog::class => '/(-\d{4}-\d{2}-\d{2}.log)/', Parsers\PHPDefault::class => '/(php_errors.log)/', ]; foreach ($map as $class => $regex) { if (preg_match($regex, $filename) === 1) { return new $class; } } return new Parsers\Basic(); } public function get(string $log_file): File { $filename = implode(DIRECTORY_SEPARATOR, [$this->getFolder(), $log_file]); $file_info = new SplFileInfo($filename); $parser = $this->getParser($log_file); return (new File()) ->setLogger($this->getLogger()) ->setParser($parser) ->setFullname($filename) ->setFilename($log_file) ->setDate((new DateTimeImmutable())->setTimestamp($file_info->getCTime())); } }