Ausnahmebehandlung in Magento 2

15

In Magento 1 konnte ich Ausnahmen abfangen und mit in die exception.logDatei einloggenMage::logException($e);

Nun, in Magento 2 kann ich catch (\Exception $e)aber was mache ich mit der gefangenen Ausnahme? Wie melde ich mich an exception.log? Oder wie geht man normalerweise damit um?

Andre Nickatina
quelle

Antworten:

18

Der einfachste Weg, um Ihre Ausnahmen zu protokollieren, ist das Einfügen Psr\Log\LoggerInterfacein den Konstruktor Ihrer Klasse:

private $logger;

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

Und dann in deiner catchAussage:

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

Alles andere, was mit der Reaktion nach dem Erkennen einer Ausnahme zu tun hat, sollte zwischen M1 und M2 nicht anders sein. Ihre Strategie wäre auch sehr spezifisch für Ihren Anwendungsfall der Ausnahmebehandlung.

brendanWeb
quelle
5
Pro - Tipp: M2 hat die Unterstützung für die Ausnahme direkt vorbei: $this->logger->debug($e).
Nevvermind
1
critical()debug()
Um
getMessage sollte ein Funktionsaufruf sein: getMessage ()
LM_Fielding
1
@LM_Fielding Guter Fang, behoben.
brendanWeb
@jonijones Mein Fehler behoben.
brendanWeb
6

Magento2 hat verschiedene Arten von Exception-Handlern, zum Beispiel:

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

Etc.

Alle Handlertypen und ihre Klassen existieren in \vendor\magento\framework\Exception.

Sie müssen den entsprechenden Ausnahmebehandler für Ihre Anforderungen auswählen und diesen verwenden.

Amit Bera
quelle