logsDir = $logsDir; } public function __invoke(string $filename, int $lines, int $skip): Response { if (!\is_file($logfile = "{$this->logsDir}/{$filename}.log")) { return new MonospaceResponse([ "Log file for '{$filename}' not found.", ]); } $file = new \SplFileObject($logfile, 'rb'); $file->seek(\PHP_INT_MAX); $totalLines = $file->key(); $limit = $skip > 0 && $lines > $skip ? $lines - $skip : -1; $reader = new \LimitIterator($file, ($offset = $totalLines - $lines) >= 0 ? $offset : 0, $limit); return new MonospaceResponse($reader); } }