Обработка исключений в Magento 2

15

В Magento 1 я смог отловить исключения и записать их в exception.logфайл, используяMage::logException($e);

Теперь, в Magento 2, я могу, catch (\Exception $e)но что мне делать с пойманным исключением? Как мне войти в систему exception.log? Или каков типичный способ справиться с этим?

Андре Никатина
источник

Ответы:

20

Самый простой способ начать регистрировать ваши исключения - Psr\Log\LoggerInterfaceвставить конструктор вашего класса:

private $logger;

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

И тогда в вашем catchзаявлении:

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

Все остальное, связанное с тем, как реагировать после обнаружения исключения, не должно отличаться между M1 и M2. Ваша стратегия также будет очень специфичной для вашего варианта использования обработки исключений.

brendanWeb
источник
5
Pro совет: M2 поддерживает непосредственно пропускание исключения: $this->logger->debug($e).
nevvermind
1
На самом деле для регистрации исключений нужно использовать critical()метод вместо этогоdebug()
Джони Джонс
getMessage должен быть вызовом функции: getMessage ()
LM_Fielding
1
@LM_Fielding Исправлена ​​ошибка.
brendanWeb
@jonijones Моя ошибка исправлена.
brendanWeb
7

Magento2 имеет разные типы обработчиков исключений, например:

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

И т.п.

Все типы обработчиков и их классы существуют в \vendor\magento\framework\Exception.

Вам нужно выбрать соответствующий обработчик исключений для ваших требований и использовать его.

Амит Бера
источник