. */ namespace SP\Providers\Log; use Exception; use Monolog\Logger; use Psr\Container\ContainerInterface; use SP\Core\Events\Event; use SP\Core\Events\EventReceiver; use SP\Core\Exceptions\InvalidClassException; use SP\Core\Language; use SP\Http\Request; use SP\Providers\EventsTrait; use SP\Providers\Provider; /** * Class LoggerBase * * @package SP\Providers\Log */ abstract class LoggerBase extends Provider implements EventReceiver { use EventsTrait; public const MESSAGE_FORMAT = 'event="%s";address="%s";user="%s";message="%s"'; /** * @var Logger */ protected Logger $logger; /** * @var Request */ protected Request $request; /** * @var string */ protected string $events; /** * @var Language */ protected Language $language; /** * Evento de actualización * * @param string $eventType Nombre del evento * @param Event $event Objeto del evento * * @throws InvalidClassException */ public function updateEvent(string $eventType, Event $event): void { $this->language->setAppLocales(); $userLogin = 'N/A'; if ($this->context->isInitialized()) { $userLogin = $this->context->getUserData()->getLogin() ?? 'N/A'; } $source = $event->getSource(); if ($source instanceof Exception) { $this->logger->error( $eventType, $this->formatContext( __($source->getMessage()), $this->request->getClientAddress(true), $userLogin ) ); } elseif (($eventMessage = $event->getEventMessage()) !== null) { $this->logger->debug( $eventType, $this->formatContext( $eventMessage->composeText(' | '), $this->request->getClientAddress(true), $userLogin ) ); } else { $this->logger->debug( $eventType, $this->formatContext( 'N/A', $this->request->getClientAddress(true), $userLogin ) ); } $this->language->unsetAppLocales(); } /** * @param string $message * @param string $address * @param string $user * * @return array */ final protected function formatContext( string $message, string $address, string $user ): array { return [ 'message' => trim($message), 'user' => trim($user), 'address' => trim($address), 'caller' => getLastCaller(4) ]; } /** * @param ContainerInterface $dic */ protected function initialize(ContainerInterface $dic): void { $this->language = $dic->get(Language::class); $this->request = $dic->get(Request::class); $configEvents = $this->config->getConfigData()->getLogEvents(); if (count($configEvents) === 0) { $this->events = $this->parseEventsToRegex(LogInterface::EVENTS_FIXED); } else { $this->events = $this->parseEventsToRegex(array_merge($configEvents, LogInterface::EVENTS_FIXED)); } $this->logger = $dic->get(Logger::class); } }