Magento 2での例外処理


15

Magento 1では、例外をキャッチして、exception.logファイルにログを記録することができました。Mage::logException($e);

今、Magento 2では、できますcatch (\Exception $e)が、キャッチされた例外をどうすればいいですか?にログインするにはどうすればよいexception.logですか?または、これを処理する一般的な方法は何ですか?

回答:


19

例外のロギングを開始する最も簡単な方法は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()
ジョニ・ジョーンズ

getMessageは関数呼び出しでなければなりません:getMessage()
LM_Fielding

1
@LM_Fielding良いキャッチ、修正。
brendanWeb

@jonijones私の間違い、修正。
brendanWeb

7

Magento2には、さまざまなタイプの例外ハンドラーがあります。例:

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

等。

すべてのハンドラタイプとそのクラスはに存在し\vendor\magento\framework\Exceptionます。

要件に関連する例外ハンドラを選択して使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.