Reverse order and multiple log files handler
This commit is contained in:
@ -22,4 +22,21 @@ class Logs
|
||||
}
|
||||
return $view->render($response, 'logs.show', compact('log', 'levels'));
|
||||
}
|
||||
public function getMore(ServerRequestInterface $request, ResponseInterface $response, View $view, Service $service, string $log_file, int $start = 0, int $amount = 100): ResponseInterface
|
||||
{
|
||||
$log = $service->get($log_file);
|
||||
|
||||
$logs = [];
|
||||
foreach ($log->getLogs($start, $amount) as $l) {
|
||||
$logs []= $l;
|
||||
}
|
||||
$logs = array_reverse($logs);
|
||||
$total = $log->getTotal();
|
||||
$response->getBody()->write(\Safe\json_encode([
|
||||
'total' => $total,
|
||||
'logs' => $logs
|
||||
]));
|
||||
return $response->withStatus(200)
|
||||
->withHeader('Content-Type', 'application/json');
|
||||
}
|
||||
}
|
||||
|
7
app/common/Define/Log.php
Normal file
7
app/common/Define/Log.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
namespace ProVM\Common\Define;
|
||||
|
||||
interface Log
|
||||
{
|
||||
|
||||
}
|
7
app/common/Define/Parser.php
Normal file
7
app/common/Define/Parser.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
namespace ProVM\Common\Define;
|
||||
|
||||
interface Parser
|
||||
{
|
||||
public function parse(string $content): Log;
|
||||
}
|
27
app/common/Implement/Parser.php
Normal file
27
app/common/Implement/Parser.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
namespace ProVM\Common\Implement;
|
||||
|
||||
use ProVM\Common\Define\Log;
|
||||
|
||||
abstract class Parser implements \ProVM\Common\Define\Parser
|
||||
{
|
||||
public function total(string $filename): int
|
||||
{
|
||||
try {
|
||||
$fh = \Safe\fopen($filename, 'r');
|
||||
$cnt = 0;
|
||||
while(!feof($fh)) {
|
||||
$line = fgets($fh);
|
||||
$cnt ++;
|
||||
}
|
||||
fclose($fh);
|
||||
return $cnt;
|
||||
} catch (\Exception $e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
public function parse(string $content): Log
|
||||
{
|
||||
return new \ProVM\Logview\Log($content);
|
||||
}
|
||||
}
|
@ -5,6 +5,8 @@ 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
|
||||
{
|
||||
@ -50,15 +52,31 @@ class Logs
|
||||
}
|
||||
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();
|
||||
}
|
||||
public function get(string $log_file): File
|
||||
{
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [$this->getFolder(), $log_file]);
|
||||
$file_info = new SplFileInfo($filename);
|
||||
$content = \Safe\file_get_contents($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()))
|
||||
->setContent($content);
|
||||
->setDate((new DateTimeImmutable())->setTimestamp($file_info->getCTime()));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user