Je suis en train de refactoriser une application Web assez grande. L'un des problèmes majeurs est la gestion incohérente des erreurs et j'essaie de trouver une stratégie sensée. J'ai créé un gestionnaire d'erreurs personnalisé, via set_error_handler, qui transforme essentiellement les erreurs PHP dans ErrorExceptions et une classe d'exception de base personnalisée, qui hérite directement d' Exception .
En production, j'utilise un fourre-tout d'exception générique, via set_exception_handler , et je suis sur le point d'ajouter la journalisation des exceptions * au mix. Mon dilemme est de savoir où faire la journalisation réelle, dans la classe d'exception de base ou dans le fourre-tout.
J'ai pensé à quelques raisons pour le connecter dans le fourre-tout:
- Il existe un certain nombre d'exceptions dans le code qui doivent être converties en un enfant approprié de la classe d'exception de base. Jusqu'à ce que cela se produise, toutes les exceptions ne seront pas enregistrées.
- Il semble en quelque sorte plus naturel de le faire dans le fourre-tout, une classe d'exception de base ne devrait pas faire plus que d'être juste cela. (Il pourrait s'agir d'un principe de responsabilité unique, mais cela pourrait simplement être un sentiment erroné)
et une raison de se connecter à la classe d'exception de base:
- Actuellement, le fourre-tout n'est utilisé que pour la production. Il serait facile de l'introduire sur nos autres environnements (développement, test) mais cela nécessiterait quelques ajustements, car les erreurs sont gérées différemment par environnement, car en production elles sont traduites en pages d'erreur 404/503.
Existe-t-il une pratique acceptable pour savoir où consigner les exceptions?
* La journalisation impliquera d'abord l'écriture dans un fichier texte, et elle peut évoluer vers l'envoi de mails pour certains types d'exceptions.
Quelques clarifications, suscitées par la réponse de @ unholysampler :
Je suis confronté à une base de code sloc 2 * 10 ^ 6, avec beaucoup de choses tierces sur lesquelles je n'ai aucun contrôle, et une partie du code sur lequel je contrôle les exceptions antérieures à PHP. Et il y a aussi un code récent merdique, nous nous remettons d'une longue période de pression intense où nous avons pratiquement dû arrêter de penser et juste pirater.
Nous refactorisons activement pour corriger toutes les incohérences et introduire une approche raisonnable de gestion des erreurs, mais cela va prendre un certain temps. Je suis plus intéressé par ce qu'il faut faire jusqu'à ce que j'arrive au point où les erreurs sont gérées de manière appropriée. Je vais probablement poser une autre question sur une stratégie d'exception raisonnable à un moment donné.
La principale motivation derrière la journalisation est de recevoir un e-mail sur mon téléphone chaque fois que quelque chose de mal se produit en production. Je me fiche que les décharges de données deviennent énormes, si elles le font, j'aurai un travail cron en supprimant les anciennes de temps en temps.