Wenn eine Ausnahme nicht in die exception.log geschrieben wird, wobei das Ausnahmemodell als Kontext dient, wird sie in New Relic oder einem anderen PSR-3 Monolog-kompatiblen Protokollspeicher nicht korrekt erkannt und analysiert. Wenn Sie nur einen Teil der Ausnahme protokollieren (oder sie in der falschen Datei protokollieren), führt dies zu Fehlern in der Produktion, wenn Ausnahmen übersehen werden.
Korrekte Ausnahmebehandlung
Die folgende Checkliste enthält Beispiele zur Veranschaulichung der korrekten Ausnahmebehandlung.
Schreiben in das Ausnahmenprotokoll
Schreiben Sie unabhängig von weiteren Aktionen unter Verwendung des folgenden Musters in das Ausnahmenprotokoll, es sei denn, es gibt einen zwingenden Grund, dies nicht zu tun.
Bei diesem Ansatz werden die $e->getMessage zur Protokollmeldung und das $e gemäß dem PSR-3-Kontextstandard) automatisch im Kontext. Dies geschieht in \Magento\Framework\Logger\Monolog::addRecord.
Stummschaltung
Stummschalten von Signalen durch Nichtprotokollieren von Ausnahmen, die Teil des beabsichtigten Betriebsablaufs sind. Wenn eine Ausnahme auftritt, sind keine Folgemaßnahmen erforderlich, sodass sie nicht protokolliert und analysiert werden muss, wenn sie auftritt. Fügen Sie einen Kommentar hinzu, der den Grund für die Stummschaltung der Signale angibt und angibt, dass dies beabsichtigt ist. Kombinieren mit phpcs:ignore.
Als Best Practice wird die Protokollierung immer zuerst im Code angezeigt, um zu verhindern, dass eine weitere Ausnahme oder ein schwerwiegender Fehler ausgelöst wird, bevor in das Protokoll geschrieben wird.
Die folgenden Beispiele zeigen eine falsche Ausnahmebehandlung.
Logik vor der Protokollierung
Die Logik vor der Protokollierung kann zu einer weiteren Ausnahme oder einem schwerwiegenden Fehler führen. Dies verhindert, dass die Ausnahme protokolliert wird, und sollte durch richtiges Beispiel“werden.
Wenn die erfasste lokalisierte Ausnahme noch nicht übersetzt wurde, beheben Sie das Problem an der Stelle, an der die Ausnahme zum ersten Mal ausgelöst wurde.
Dieser Ansatz führt zu Zeilenumbrüchen in der Nachricht, die nicht mit PSR-3 konform sind. Die Ausnahme, einschließlich Stacktrace, muss Teil des Nachrichtenkontexts sein, um sicherzustellen, dass sie korrekt mit der Nachricht in New Relic oder einem anderen PSR-3 Monolog-kompatiblen Protokollspeicher gespeichert wird.
Die Ausnahme wird zu einem Fehler heruntergestuft, wodurch nicht die Übergabe eines -Objekts, sondern nur einer Zeichenfolge ermöglicht wird. Daher die getMessage(). Dadurch geht die Ablaufverfolgung verloren und sollte durch die richtigen Beispiele ersetzt werden, die unter Schreiben in das Ausnahmenprotokoll oder Downgrade-Ausnahmen zu sehen sind.
Nur die Nachricht im Ausnahmenprotokoll protokollieren
Anstatt das -Objekt $e zu übergeben, wird nur $e->getMessage() übergeben. Dadurch geht die Ablaufverfolgung verloren und sollte durch die richtigen Beispiele ersetzt werden, die gezeigt werden Schreiben in das Ausnahmenprotokoll oder Downgrade-Ausnahmen.
Das Auslassen der phpcs:ignore-Trigger ist ein Warnhinweis in PHPCS und sollte nicht Ihren CI übergeben. Dies sollte durch das richtige Beispiel ersetzt werden, das unter Stummschaltungssignale“ist.