Manejo de excepciones en Magento 2

15

En Magento 1 pude capturar excepciones e iniciarlas en el exception.logarchivo usandoMage::logException($e);

Ahora, en Magento 2, puedo catch (\Exception $e)pero ¿qué hago con la excepción atrapada? ¿Cómo inicio sesión en el exception.log? ¿O cuál es la forma típica de manejar esto?

Andre Nickatina
fuente

Respuestas:

20

La forma más fácil de comenzar a registrar sus excepciones sería inyectarlas Psr\Log\LoggerInterfaceen el constructor de su clase:

private $logger;

public function __construct(\Psr\Log\LoggerInterface $logger)
{
    $this->logger = $logger;
}

Y luego en tu catchdeclaración:

public function doSomething()
{
    try {
        /* Some logic that could throw an Exception */
    } catch (\Exception $e) {
        $this->logger->critical($e->getMessage());
    }
}

Cualquier otra cosa relacionada con cómo reaccionar después de que se haya detectado una excepción no debería ser diferente entre M1 y M2. Su estrategia también sería muy específica para su caso de uso de manejo de excepciones.

brendanWeb
fuente
55
Pro consejo: M2 tiene soporte para pasar directamente a la excepción: $this->logger->debug($e).
nevvermind
1
En realidad, para registrar excepciones, es necesario usar el critical()método en su lugardebug()
joni jones
getMessage debería ser una llamada de función: getMessage ()
LM_Fielding
1
@LM_Fielding Buena captura, corregida.
brendanWeb
@jonijones Mi error, corregido.
brendanWeb
7

Magento2 tiene diferentes tipos de manejadores de excepciones, por ejemplo:

  • StateException
  • InputException
  • InvalidEmailOrPasswordException
  • MailException
  • NotFoundException
  • ValidatorException

Etc.

Todos los tipos de controladores y sus clases existen en \vendor\magento\framework\Exception.

Debe elegir el controlador de excepción relevante para sus requisitos y usarlo.

Amit Bera
fuente