Magento 2中的异常处理


15

在Magento 1中,我能够捕获异常并将其记录到exception.log文件中,使用Mage::logException($e);

现在,在Magento 2中,我可以catch (\Exception $e)但是如何处理捕获的异常?如何将其登录到exception.log?或典型的处理方式是什么?

Answers:


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之间,与捕获异常后如何做出反应的其他任何事情都不应有任何区别。您的策略也将非常适合于异常处理用例。


5
专家提示:M2支持直接传递异常:$this->logger->debug($e)
nevvermind

1
实际上,记录异常需要改用该critical()方法debug()
joni jones

getMessage应该是一个函数调用:getMessage()
LM_Fielding '16

1
@LM_Fielding好收获,已修复。
brendanWeb '16

@jonijones我的错误已解决。
brendanWeb '16

7

Magento2具有不同类型的异常处理程序,例如:

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

等等。

所有处理程序类型及其类都存在于中\vendor\magento\framework\Exception

您需要为您的需求选择相关的异常处理程序并使用它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.