Si une exception n’est pas écrite dans le fichier exception.log avec le modèle d’exception comme contexte, elle n’est pas reconnue et analysée correctement dans New Relic ou dans un autre stockage de journal compatible avec le format PSR-3. La journalisation d’une partie seulement de l’exception (ou la journalisation dans un fichier incorrect) entraîne des bogues en production lorsque les exceptions sont négligées.
Correction de la gestion des exceptions
La liste de contrôle suivante fournit des exemples pour démontrer la gestion correcte des exceptions.
Écriture dans le journal des exceptions
Écrivez dans le journal des exceptions à l’aide du modèle suivant, indépendamment des autres actions, sauf s’il y a une raison irréfutable de ne pas le faire.
Cette approche enregistre automatiquement le $e->getMessage dans le message du journal et l’objet $e dans le contexte, en suivant la norme contextuelle PSR-3. Cette opération est effectuée dans \Magento\Framework\Logger\Monolog::addRecord.
Signaux muets
Mutez les signaux en ne consignant pas les exceptions qui font partie du flux d’opérations prévu. Aucune action de suivi n’est nécessaire lorsque l’exception est rencontrée. Il n’est donc pas nécessaire de la consigner et de l’analyser lorsqu’elle se produit. Ajoutez un commentaire indiquant la raison de l’arrêt des signaux et le caractère intentionnel de ce dernier. Combinez avec phpcs:ignore.
La journalisation est une bonne pratique qui s’affiche toujours en premier dans le code afin d’éviter les cas où une autre exception ou erreur fatale est générée avant d’écrire dans le journal.
Les exemples suivants montrent une gestion incorrecte des exceptions.
Logique avant journalisation
La logique avant la journalisation peut entraîner une autre exception ou une erreur fatale, qui empêche l’enregistrement de l’exception et doit être remplacée par exemple correct.
Cette approche introduit des sauts de ligne dans le message, qui n’est pas conforme au PSR-3. L’exception, y compris la trace de la pile, doit faire partie du contexte du message pour s’assurer qu’il est enregistré correctement avec le message dans New Relic ou dans un autre stockage de journal compatible avec le format PSR-3.
L’exception est dégradée en erreur, ce qui ne permet pas de transmettre un objet, mais seulement une chaîne, d’où l’ getMessage(). Cela entraîne la perte de la trace et doit être remplacé par les exemples corrects présentés dans la section Écrire au journal des exceptions ou Rétrograder les exceptions.
Si vous omettez la ligne phpcs:ignore, un avertissement s’affiche dans le PHPCS et vous ne devriez pas transmettre votre CI. Ceci doit être remplacé par l’exemple correct illustré dans Signaux muets.