Sto eseguendo il refactoring di un'app Web abbastanza grande. Uno dei problemi principali è la gestione degli errori incoerente e sto cercando di elaborare una strategia ragionevole. Ho creato un gestore di errori personalizzato, tramite set_error_handler che essenzialmente trasforma gli errori PHP in ErrorExceptions e una classe di eccezioni di base personalizzata, che eredita direttamente da Exception .
In produzione sto usando un'eccezione generica catch-all, tramite set_exception_handler , e sto per aggiungere la registrazione delle eccezioni * al mix. Il mio dilemma è dove effettuare la registrazione effettiva, nella classe di eccezioni di base o nel catch-all.
Ho pensato a un paio di motivi per registrarlo nel catch-all:
- Esistono alcune eccezioni nel codice che devono essere convertite in un figlio appropriato della classe di eccezioni di base. Fino a quando ciò non accadrà, non tutte le eccezioni verranno registrate.
- In qualche modo sembra più naturale farlo nel complesso, una classe di eccezioni di base non dovrebbe fare altro che essere proprio questo. (Potrebbe essere una sola cosa del principio di responsabilità, ma potrebbe essere solo una sensazione fuorviante)
e un motivo per accedere alla classe di eccezione di base:
- Attualmente il catch-all è utilizzato solo in produzione. Sarebbe facile introdurlo negli altri nostri ambienti (sviluppo, test) ma ciò richiederebbe alcuni aggiustamenti, poiché gli errori vengono gestiti in modo diverso per ambiente, poiché sulla produzione vengono tradotti in pagine di errore 404/503.
Esistono pratiche accettabili su dove registrare le eccezioni?
* La registrazione comporterà inizialmente la scrittura in un file di testo e potrebbe evolversi nell'invio di posta per determinati tipi di eccezioni.
Alcuni chiarimenti, spinti dalla risposta di @ unholysampler :
Sto affrontando una base di codice sloc 2 * 10 ^ 6, con molte cose di terze parti su cui non ho alcun controllo e parte del codice che ho controllo sulle eccezioni precedenti a PHP. E c'è anche un pessimo codice recente, ci stiamo riprendendo da un lungo periodo di intensa pressione in cui abbiamo praticamente dovuto smettere di pensare e solo hackerato.
Stiamo attivamente effettuando il refactoring per affrontare tutte le incoerenze e introdurre un approccio ragionevole alla gestione degli errori, ma ci vorrà del tempo. Sono più interessato a cosa fare fino a quando non raggiungo il punto in cui gli errori vengono gestiti in modo appropriato. Probabilmente farò un'altra domanda su una strategia di eccezione ragionevole ad un certo punto.
La motivazione principale alla base della registrazione è quella di ricevere un'e-mail sul mio telefono ogni volta che succede qualcosa di brutto durante la produzione. Non mi importa se i dump di dati diventano enormi, se lo fanno avrò un lavoro cron che elimina quelli vecchi di tanto in tanto.