From 5740c0e47f002c1998f18f54ddd9b50ab0f56dd1 Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Wed, 26 Mar 2025 11:37:16 -0300 Subject: [PATCH 1/3] Logs simplificados en dev --- app/setup/setups/logs.php | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/setup/setups/logs.php b/app/setup/setups/logs.php index fe62d82..d0f7e64 100644 --- a/app/setup/setups/logs.php +++ b/app/setup/setups/logs.php @@ -2,31 +2,41 @@ use Psr\Container\ContainerInterface; return [ + Monolog\Formatter\LineFormatter::class => function(ContainerInterface $container) { + return (new Monolog\Formatter\LineFormatter(null, null, false, false, true)) + ->setBasePath('/code/'); + }, Psr\Log\LoggerInterface::class => function(ContainerInterface $container) { return new Monolog\Logger('incoviba', [ new Monolog\Handler\FilterHandler( - (new Monolog\Handler\RotatingFileHandler('/logs/error.log', 10)) - ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)), + ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') + ? (new Monolog\Handler\StreamHandler('/logs/error.log')) + ->setFormatter($container->get(Monolog\Formatter\LineFormatter::class)) + : (new Monolog\Handler\RotatingFileHandler('/logs/error.log', 10)) + ->setFormatter($container->get(Monolog\Formatter\LineFormatter::class)), Monolog\Level::Error, Monolog\Level::Error ), new Monolog\Handler\FilterHandler( - (new Monolog\Handler\RotatingFileHandler('/logs/critical.log', 10)) - ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)), + ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') + ? (new Monolog\Handler\StreamHandler('/logs/critical.log')) + ->setFormatter($container->get(Monolog\Formatter\LineFormatter::class)) + : (new Monolog\Handler\RotatingFileHandler('/logs/critical.log', 10)) + ->setFormatter($container->get(Monolog\Formatter\LineFormatter::class)), Monolog\Level::Critical ), new Monolog\Handler\FilterHandler( ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') - ? (new Monolog\Handler\RotatingFileHandler('/logs/debug.log', 10)) - ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)) + ? (new Monolog\Handler\StreamHandler('/logs/debug.log')) + ->setFormatter($container->get(Monolog\Formatter\LineFormatter::class)) : new Monolog\Handler\RedisHandler($container->get(Predis\ClientInterface::class), 'logs:notices'), Monolog\Level::Debug, Monolog\Level::Info ), new Monolog\Handler\FilterHandler( ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') - ? (new Monolog\Handler\RotatingFileHandler('/logs/notices.log', 10)) - ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)) + ? (new Monolog\Handler\StreamHandler('/logs/notices.log')) + ->setFormatter($container->get(Monolog\Formatter\LineFormatter::class)) : (new Incoviba\Common\Implement\Log\MySQLHandler($container->get(Incoviba\Common\Define\Connection::class))) ->setFormatter(new Incoviba\Common\Implement\Log\PDOFormatter()), Monolog\Level::Notice, From e445298159c579c26bbb416908a45822526e8d2f Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Wed, 26 Mar 2025 11:37:38 -0300 Subject: [PATCH 2/3] Json error --- app/src/Controller/API/withJson.php | 70 +++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/app/src/Controller/API/withJson.php b/app/src/Controller/API/withJson.php index cc4c051..35a91f9 100644 --- a/app/src/Controller/API/withJson.php +++ b/app/src/Controller/API/withJson.php @@ -1,6 +1,7 @@ getBody()->write(json_encode($data)); return $response->withStatus($statusCode)->withHeader('Content-Type', 'application/json'); } + public function parseError(Throwable $exception): array + { + return [ + 'code' => $exception->getCode(), + 'message' => $exception->getMessage(), + 'file' => $this->parseFilename($exception->getFile()), + 'line' => $exception->getLine(), + 'trace' => $this->parseStack($exception->getTraceAsString()), + 'previous' => ($exception->getPrevious() instanceof Throwable) ? $this->parseError($exception->getPrevious()) : '' + ]; + } + public function withError(ResponseInterface $response, Throwable $exception): ResponseInterface + { + $output = $this->parseError($exception); + + $response->getBody()->write(json_encode(['error' => $output])); + return $response->withHeader('Content-Type', 'application/json'); + } + public function withErrors(ResponseInterface $response, array $errors): ResponseInterface + { + foreach ($errors as $error) { + $response = $this->withError($response, $error); + } + + return $response; + } + + protected function parseFilename(string $filename): string + { + return str_replace('/code/', '', $filename); + } + protected function parseStack(string|array $stack): array + { + if (is_string($stack)) { + $stack = explode(PHP_EOL, $stack); + } + $output = []; + foreach ($stack as $line) { + $index = substr($line, 1, strpos($line, ' ') - 1); + $content = substr($line, strpos($line, ' ') + 1); + if (str_contains($line, '{main}')) { + $output [] = [ + 'stack' => $index, + 'message' => $content + ]; + continue; + } + if (str_starts_with($content, '[internal function]')) { + $content = substr($content, strlen('[internal function]: ')); + $output [] = [ + 'stack' => $index, + 'type' => 'internal function', + 'message' => $content + ]; + continue; + } + $fileData = substr($content, 0, strpos($content, ' ')); + $file = substr($fileData, 0, strrpos($fileData, '(')); + $fileLine = (int) substr($fileData, strrpos($fileData, '(') + 1, -2); + $error = substr($content, strlen($fileData) + 1); + $output []= [ + 'stack' => $index, + 'file' => $this->parseFilename($file), + 'line' => $fileLine, + 'error' => $error + ]; + } + return $output; + } } From e7da0d5d00f815756cbd83cc25ac378a5f4267f5 Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Wed, 26 Mar 2025 11:37:52 -0300 Subject: [PATCH 3/3] Limpieza --- app/src/Service/Search.php | 1 - app/src/Service/Venta.php | 1 - 2 files changed, 2 deletions(-) diff --git a/app/src/Service/Search.php b/app/src/Service/Search.php index d687cef..757c86a 100644 --- a/app/src/Service/Search.php +++ b/app/src/Service/Search.php @@ -2,7 +2,6 @@ namespace Incoviba\Service; use Incoviba\Common\Implement\Exception\EmptyResult; -use Incoviba\Common\Implement\Exception\EmptyResponse; use Incoviba\Model; use Incoviba\Repository; diff --git a/app/src/Service/Venta.php b/app/src/Service/Venta.php index 4d9eeea..0ed32fc 100644 --- a/app/src/Service/Venta.php +++ b/app/src/Service/Venta.php @@ -3,7 +3,6 @@ namespace Incoviba\Service; use Exception; use DateTimeImmutable; -use DateInterval; use DateMalformedStringException; use Psr\Log\LoggerInterface; use Incoviba\Common\Ideal\Service;