83 lines
2.2 KiB
PHP
83 lines
2.2 KiB
PHP
<?php
|
|
namespace ProVM\Common\Service;
|
|
|
|
use DateTimeImmutable;
|
|
use SplFileInfo;
|
|
use Psr\Log\LoggerInterface;
|
|
use ProVM\Logview\Log\File;
|
|
use ProVM\Common\Define\Parser;
|
|
use ProVM\Logview\Parser as Parsers;
|
|
|
|
class Logs
|
|
{
|
|
public function __construct(LoggerInterface $logger, string $folder)
|
|
{
|
|
$this
|
|
->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\Monolog::class => '/(-\d{4}-\d{2}-\d{2}.log)/',
|
|
Parsers\PHPDefault::class => '/(php_errors.log)/'
|
|
];
|
|
foreach ($map as $class => $regex) {
|
|
if (\Safe\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()));
|
|
}
|
|
}
|