Skip when error in parsing log file

This commit is contained in:
2023-02-14 23:18:30 -03:00
parent e59e91805b
commit 110f37e4f4
3 changed files with 32 additions and 4 deletions

View File

@ -3,23 +3,35 @@ namespace ProVM\Common\Service;
use DateTimeImmutable;
use SplFileInfo;
use Psr\Log\LoggerInterface;
use ProVM\Logview\Log\File;
class Logs
{
public function __construct(string $folder)
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;
@ -43,6 +55,10 @@ class Logs
$filename = implode(DIRECTORY_SEPARATOR, [$this->getFolder(), $log_file]);
$file_info = new SplFileInfo($filename);
$content = \Safe\file_get_contents($filename);
return (new File())->setFilename($log_file)->setDate((new DateTimeImmutable())->setTimestamp($file_info->getCTime()))->setContent($content);
return (new File())
->setLogger($this->getLogger())
->setFilename($log_file)
->setDate((new DateTimeImmutable())->setTimestamp($file_info->getCTime()))
->setContent($content);
}
}

View File

@ -4,6 +4,7 @@ use Psr\Container\ContainerInterface;
return [
ProVM\Common\Service\Logs::class => function(ContainerInterface $container) {
return new ProVM\Common\Service\Logs(
$container->get(Psr\Log\LoggerInterface::class),
$container->get('logs_folder')
);
}

View File

@ -2,14 +2,20 @@
namespace ProVM\Logview\Log;
use DateTimeInterface;
use Psr\Log\LoggerInterface;
use ProVM\Logview\Log;
class File
{
protected LoggerInterface $logger;
protected string $filename;
protected DateTimeInterface $dateTime;
protected string $content;
public function getLogger(): LoggerInterface
{
return $this->logger;
}
public function getFilename(): string
{
return $this->filename;
@ -23,6 +29,11 @@ class File
return $this->content;
}
public function setLogger(LoggerInterface $logger): File
{
$this->logger = $logger;
return $this;
}
public function setFilename(string $filename): File
{
$this->filename = $filename;
@ -49,9 +60,9 @@ class File
}
try {
$logs []= Log::parse($line);
} catch (\Exception $e) {
} catch (\Error | \Exception $e) {
$this->getLogger()->debug($line);
throw $e;
$this->getLogger()->error($e);
}
}
return array_reverse($logs);