Manipulação de exceção no Magento 2

15

No Magento 1, eu pude capturar exceções e registrá-las no exception.logarquivo usandoMage::logException($e);

Agora, no Magento 2, eu posso, catch (\Exception $e)mas o que faço com a exceção capturada? Como faço para logar no exception.log? Ou qual é a maneira típica de lidar com isso?

Andre Nickatina
fonte

Respostas:

19

A maneira mais fácil de começar a registrar suas exceções seria injetar Psr\Log\LoggerInterfaceno construtor da sua classe:

private $logger;

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

E então na sua catchdeclaração:

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

Qualquer outra coisa relacionada a como reagir após a captura de uma exceção não deve ser diferente entre M1 e M2. Sua estratégia também seria muito específica para o seu caso de uso de manipulação de exceção.

brendanWeb
fonte
5
Pro dica: M2 tem suporte para passar diretamente a exceção: $this->logger->debug($e).
N /
1
Na verdade, para registrar exceções precisa usar o critical()método em vezdebug()
Joni Jones
getMessage deve ser uma chamada de função: getMessage ()
LM_Fielding
1
@LM_Fielding Boa captura, fixa.
brendanWeb
@jonijones Meu erro foi corrigido.
brendanWeb
7

O Magento2 possui diferentes tipos de manipuladores de exceção, por exemplo:

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

Etc.

Todos os tipos de manipuladores e suas classes existem em \vendor\magento\framework\Exception.

Você precisa escolher o manipulador de exceção relevante para seus requisitos e usá-lo.

Amit Bera
fonte