Compare commits

...

2 Commits

Author SHA1 Message Date
032d00fbb6 Exception history 2025-10-03 11:48:11 -03:00
fa2b9d130b Log exception processor 2025-10-03 11:47:13 -03:00
3 changed files with 69 additions and 2 deletions

View File

@ -0,0 +1,66 @@
<?php
namespace Incoviba\Common\Implement\Log\Processor;
use Throwable;
use Monolog\LogRecord;
use Monolog\Processor\ProcessorInterface;
class Exception implements ProcessorInterface
{
public function __invoke(LogRecord $record): LogRecord
{
$context = $record->context;
foreach ($context as $key => $value) {
if (is_a($value, Throwable::class)) {
$exception = $value;
$output = $this->processException($exception);
$context[$key] = $output;
$new_record = new LogRecord(
$record->datetime,
$record->channel,
$record->level,
$record->message,
$context,
$record->extra
);
$record = $new_record;
}
}
if (is_a($record->message, Throwable::class)) {
$exception = $record->message;
$output = $this->processException($exception);
$message = $output['message'];
if (array_key_exists('exception', $context)) {
$context['other_exception'] = $context['exception'];
}
$context['exception'] = $output;
$new_record = new LogRecord(
$record->datetime,
$record->channel,
$record->level,
$message,
$context,
$record->extra
);
$record = $new_record;
}
return $record;
}
protected function processException(Throwable $exception): array
{
$output = [
'class' => get_class($exception),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'trace' => $exception->getTraceAsString(),
];
if ($exception->getPrevious() !== null) {
$output['previous'] = $this->processException($exception);
}
return $output;
}
}

View File

@ -25,6 +25,7 @@ return [
$container->get(Monolog\Processor\MemoryPeakUsageProcessor::class), $container->get(Monolog\Processor\MemoryPeakUsageProcessor::class),
$container->get(Monolog\Processor\PsrLogMessageProcessor::class), $container->get(Monolog\Processor\PsrLogMessageProcessor::class),
$container->get(Monolog\Processor\UidProcessor::class), $container->get(Monolog\Processor\UidProcessor::class),
$container->get(Incoviba\Common\Implement\Log\Processor\Exception::class),
]; ];
}, },
'baseDefaultHandlers' => function(ContainerInterface $container) { 'baseDefaultHandlers' => function(ContainerInterface $container) {

View File

@ -48,8 +48,8 @@ class Ine implements Provider
]); ]);
try { try {
$response = $this->client->get($request_uri); $response = $this->client->get($request_uri);
} catch (GuzzleException) { } catch (GuzzleException $exception) {
throw new EmptyResponse($request_uri); throw new EmptyResponse($request_uri, $exception);
} }
$body = $response->getBody(); $body = $response->getBody();
$json = json_decode($body->getContents()); $json = json_decode($body->getContents());