Files
logview/app/common/Service/Logs.php

83 lines
2.2 KiB
PHP
Raw Normal View History

2023-02-14 17:27:01 -03:00
<?php
namespace ProVM\Common\Service;
2023-02-14 22:50:35 -03:00
use DateTimeImmutable;
use SplFileInfo;
2023-02-14 23:18:30 -03:00
use Psr\Log\LoggerInterface;
2023-02-14 17:27:01 -03:00
use ProVM\Logview\Log\File;
use ProVM\Common\Define\Parser;
use ProVM\Logview\Parser as Parsers;
2023-02-14 17:27:01 -03:00
class Logs
{
2023-02-14 23:18:30 -03:00
public function __construct(LoggerInterface $logger, string $folder)
2023-02-14 17:27:01 -03:00
{
$this
2023-02-14 23:18:30 -03:00
->setLogger($logger)
2023-02-14 17:27:01 -03:00
->setFolder($folder);
}
2023-02-14 23:18:30 -03:00
protected LoggerInterface $logger;
2023-02-14 17:27:01 -03:00
protected string $folder;
2023-02-14 23:18:30 -03:00
public function getLogger(): LoggerInterface
{
return $this->logger;
}
2023-02-14 17:27:01 -03:00
public function getFolder(): string
{
return $this->folder;
}
2023-02-14 23:18:30 -03:00
public function setLogger(LoggerInterface $logger): Logs
{
$this->logger = $logger;
return $this;
}
2023-02-14 17:27:01 -03:00
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 => '/(php-\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();
}
2023-02-14 17:27:01 -03:00
public function get(string $log_file): File
{
2023-02-14 22:50:35 -03:00
$filename = implode(DIRECTORY_SEPARATOR, [$this->getFolder(), $log_file]);
$file_info = new SplFileInfo($filename);
$parser = $this->getParser($log_file);
2023-02-14 23:18:30 -03:00
return (new File())
->setLogger($this->getLogger())
->setParser($parser)
->setFullname($filename)
2023-02-14 23:18:30 -03:00
->setFilename($log_file)
->setDate((new DateTimeImmutable())->setTimestamp($file_info->getCTime()));
2023-02-14 17:27:01 -03:00
}
}