. */ namespace SP\Providers\Log; use DI\Container; use DI\DependencyException; use DI\NotFoundException; use Exception; use Monolog\Logger; 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; const MESSAGE_FORMAT = 'event="%s";address="%s";user="%s";message="%s"'; /** * @var Logger */ protected $logger; /** * @var Request */ protected $request; /** * @var string */ protected $events; /** * @var Language */ protected $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) { $this->language->setAppLocales(); $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 $message * @param $address * @param $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 Container $dic * * @throws DependencyException * @throws NotFoundException */ protected function initialize(Container $dic) { $this->language = $dic->get(Language::class); $this->request = $dic->get(Request::class); $configEvents = $this->config->getConfigData()->getLogEvents(); if (empty($configEvents)) { $this->events = $this->parseEventsToRegex(LogInterface::EVENTS_FIXED); } else { $this->events = $this->parseEventsToRegex(array_merge($configEvents, LogInterface::EVENTS_FIXED)); } $this->logger = $dic->get(Logger::class); } }