Aanbevolen werkwijzen voor het verwerken van uitzonderingen

Als een uitzondering niet naar het exception.log dossier met het uitzonderingsmodel als context wordt geschreven, wordt het niet erkend en correct geanalyseerd in New Relic of andere PSR-3 monolog-compatibele logboekopslag. Het registreren slechts een deel van de uitzondering (of het registreren van het aan het verkeerde dossier) leidt tot insecten in productie wanneer de uitzonderingen worden genegeerd.

Uitzonderingsverwerking corrigeren

De volgende controlelijst verstrekt voorbeelden om correcte uitzonderingsbehandeling aan te tonen.

correct schrijft aan het uitzonderingslogboek

Schrijf aan het uitzonderingslogboek gebruikend het volgende patroon, ongeacht verdere acties, tenzij er een dwingende reden is om niet te doen.

try {
    $this->productRepository->getById($sku);
} catch (Exception $e) {
    $this->logger->critical($e);
}

Deze benadering bewaart automatisch $e->getMessage aan het logboekbericht en het $e voorwerp aan de context, na PSR-3 contextstandaard. Dit gebeurt in \Magento\Framework\Logger\Monolog::addRecord .

correcte Geluidssignalen dempen

De signalen van de demping door uitzonderingen niet te registreren die deel van de voorgenomen verrichtingenstroom uitmaken. Er is geen follow-upactie nodig wanneer de uitzondering wordt aangetroffen, dus deze hoeft niet te worden geregistreerd en geanalyseerd wanneer deze zich voordoet. Voeg een opmerking toe die de reden voor het dempen van signalen aangeeft en die aangeeft dat dit opzettelijk is. Combineer met phpcs:ignore .

try {
    $this->productRepository->deleteById($sku);
} catch (NoSuchEntityException $e) { // phpcs:ignore Magento2.CodeAnalysis.EmptyBlock.DetectedCatch
    // Product already removed
}

correcte uitzonderingen van de Ondergraving

De uitzonderingen van de daling door PSR-3 contextstandaardte volgen.

try {
    $this->productRepository->getById($sku);
} catch (Exception $e) {
    $this->logger->debug($e->getMessage(), ['exception' => $e]);
}

correct het Registreren komt altijd eerst

Als beste praktijk komt het registreren altijd eerst in de code om gevallen te verhinderen waar een andere uitzondering of een fatale fout alvorens aan het logboek wordt geworpen.

try {
    $this->productRepository->getById($sku);
} catch (Exception $e) {
    $this->logger->critical($e);
    $this->alternativeProcedure();
}

correcte berichten van het Logboek en het volledige uitzonderingsspoor

De berichten van het logboek en het volledige uitzonderingsspoor door PSR-3 contextstandaardte volgen.

try {
    $this->productRepository->getById($sku);
} catch (Exception $e) {
    $this->logger->critical($e->getMessage(), ['exception' => $e, 'trace' => $e->getTrace()]);
}

Onjuiste uitzonderingsverwerking

In de volgende voorbeelden wordt een onjuiste afhandeling van uitzonderingen getoond.

onjuiste Logica alvorens te registreren

De logica vóór het registreren kan tot een andere uitzondering of fatale fout leiden, die de uitzondering verhindert worden geregistreerd en zou door correct voorbeeldmoeten worden vervangen.

try {
    $this->productRepository->deleteById($sku);
} catch (NoSuchEntityException $e) {
    $this->alternativeProcedure();
    $this->logger->critical($e);
}

onjuist Leeg catch

Lege catch blokken kunnen een teken van onbedoeld dempen zijn en zouden door het correcte voorbeeldmoeten worden vervangen.

try {
    $this->productRepository->deleteById($sku);
} catch (NoSuchEntityException $e) {
}

onjuiste dubbele lokalisatie

Als de gevangen gelokaliseerde uitzondering nog niet wordt vertaald, los het probleem op de plaats op waar de uitzondering de eerste keer wordt geworpen.

try {
    $this->productRepository->getById($sku);
} catch (LocalizedException $e) {
    throw new LocalizedException(__($e->getMessage()));
}

onjuiste de berichten van het Logboek en spoor aan verschillende logboekdossiers

In de volgende code wordt de stacktracering voor een uitzondering verkeerd als een tekenreeks naar een logbestand geregistreerd.

try {
    $this->productRepository->getById($sku);
} catch (\Exception $e) {
    $this->logger->error($e->getMessage());
    $this->logger->debug($e->getTraceAsString());
}

Deze benadering introduceert lijnonderbrekingen in het bericht, dat niet volgzaam met PSR-3 is. De uitzondering, met inbegrip van stapelspoor, moet deel van de berichtcontext uitmaken om ervoor te zorgen dat het correct met het bericht in New Relic of andere PSR-3 monolog-compatibele logboekopslag wordt bewaard.

Los dit probleem door de code na de correcte die voorbeelden te vervangen in worden getoond schrijven aan het uitzonderingslogboekof uitzonderingen van de Ondergraving.

onjuiste de uitzonderingen van de Downgrade zonder context

De uitzondering wordt gedowngraded naar een fout, die niet toestaat dat een object wordt doorgegeven, maar alleen een tekenreeks, vandaar de getMessage() . Dit veroorzaakt het spoor dat moet worden verloren en door de correcte die voorbeelden worden vervangen in worden getoond schrijven aan het uitzonderingslogboekof uitzonderingen van de Ondergraving.

try {
    $this->productRepository->getById($sku);
} catch (\Exception $e) {
    $this->logger->error($e->getMessage());
}

onjuist Logboek slechts het bericht aan het uitzonderingslogboek

In plaats van het object $e door te geven, wordt alleen $e->getMessage() doorgegeven. Dit veroorzaakt het spoor dat moet worden verloren en door de correcte getoonde voorbeelden worden vervangen schrijft aan het uitzonderingslogboekof uitzonderingen van de Ondergraving.

try {
    $this->productRepository->getById($sku);
} catch (\Exception $e) {
    $this->logger->critical($e->getMessage());
}

onjuist Ontbrekend // phpcs:ignore Magento2.CodeAnalysis.EmptyBlock.DetectedCatch

Als u de regel phpcs:ignore weglaat, wordt een waarschuwing in PHPCS gegenereerd en wordt uw CI niet doorgegeven. Dit zou door het correcte voorbeeld moeten worden vervangen dat in wordt getoond signalen van de Dempen.

try {
    $this->productRepository->deleteById($sku);
} catch (NoSuchEntityException $e) {
    // Product already removed
}
recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60