Wenn eine Ausnahme nicht in die Datei exception.log geschrieben wurde, mit dem Ausnahmemodell als Kontext, wird sie in New Relic oder einem anderen monolog-kompatiblen PSR-3-Protokollspeicher nicht korrekt erkannt und analysiert. Die Protokollierung nur eines Teils der Ausnahme (oder die Protokollierung in die falsche Datei) führt zu Produktionsfehlern, wenn Ausnahmen übersehen werden.
Korrekte Ausnahmebehandlung
Die folgende Checkliste enthält Beispiele für die korrekte Handhabung von Ausnahmen.
Schreiben Sie in das Ausnahmeprotokoll
Schreiben Sie mit dem folgenden Muster in das Ausnahmeprotokoll, unabhängig von weiteren Aktionen, es sei denn, es gibt einen zwingenden Grund, dies nicht zu tun.
Bei diesem Ansatz wird der $e->getMessage automatisch in der Protokollmeldung und das $e -Objekt im Kontext gespeichert, entsprechend dem PSR-3-Kontextstandard. Dies erfolgt in \Magento\Framework\Logger\Monolog::addRecord.
Stummschaltsignale
Stummschaltsignale, indem keine Ausnahmen protokolliert werden, die Teil des beabsichtigten Betriebsablaufs sind. Wenn die Ausnahme auftritt, ist keine Folgeaktion erforderlich, sodass sie nicht protokolliert und analysiert werden muss, wenn sie auftritt. Fügen Sie einen Kommentar hinzu, der angibt, warum Signale stummgeschaltet werden und ob dies beabsichtigt ist. Kombinieren Sie mit phpcs:ignore.
Als Best Practice wird die Protokollierung immer zuerst im Code durchgeführt, um Fälle zu verhindern, in denen eine andere Ausnahme oder ein schwerwiegender Fehler ausgelöst wird, bevor in das Protokoll geschrieben wird.
Die folgenden Beispiele zeigen eine falsche Ausnahmebehandlung.
Logik vor Protokollierung
Die Logik vor der Protokollierung kann zu einer weiteren Ausnahme oder zu einem schwerwiegenden Fehler führen, der verhindert, dass die Ausnahme protokolliert wird, und durch korrektes Beispiel ersetzt werden sollte.
Wenn die erfasste lokalisierte Ausnahme noch nicht übersetzt ist, beheben Sie das Problem an der Stelle, an der die Ausnahme zum ersten Mal ausgelöst wird.
Durch diesen Ansatz werden Zeilenumbrüche in der Nachricht eingeführt, die nicht mit PSR-3 konform sind. Die Ausnahme, einschließlich Stacktrace, muss Teil des Nachrichtenkontexts sein, um sicherzustellen, dass sie mit der Nachricht in New Relic oder einem anderen monolog-kompatiblen PSR-3-Protokollspeicher korrekt gespeichert wird.
Die Ausnahme wird auf einen Fehler herabgestuft, bei dem kein Objekt, sondern nur eine Zeichenfolge, also das getMessage(), übergeben werden kann. Dadurch geht die Trace verloren und sollte durch die korrekten Beispiele ersetzt werden, die in Schreiben in das Ausnahmeprotokoll oder Downgrade-Ausnahmefehler angezeigt werden.
Protokollieren Sie nur die Meldung im Ausnahmeprotokoll
Statt das Objekt $e zu übergeben, wird nur $e->getMessage() übergeben. Dadurch geht die Trace verloren und sollte durch die richtigen Beispiele ersetzt werden, die für Schreiben in das Ausnahmeprotokoll oder Herabstufen von Ausnahmen stehen.
Wenn Sie die Zeile phpcs:ignore auslassen, wird eine Warnung in PHPCS Trigger und Ihre CI sollte nicht übergeben werden. Dies sollte durch das richtige Beispiel aus Stummschaltsignale ersetzt werden.