Sono in procinto di refactoring di un'app web abbastanza grande. Uno dei principali problemi è la gestione degli errori incoerente e sto cercando di trovare una strategia ragionevole. Ho creato un gestore di errori personalizzato, tramite set_error_handler che sostanzialmente trasforma gli errori PHP in ErrorExceptions e una classe di eccezioni di base personalizzata, che eredita direttamente da Exception .
In fase di produzione sto utilizzando un'eccezione generica, tramite set_exception_handler , e sto per aggiungere la registrazione delle eccezioni * al mix. Il mio dilemma è dove eseguire la registrazione effettiva, nella classe di eccezioni di base o nel catch-all.
Ho pensato a un paio di motivi per collegarlo al catch-all:
- Ci sono alcune eccezioni nel codice che devono essere convertite in un figlio appropriato della classe di eccezioni di base. Fino a quel momento, non tutte le eccezioni verranno registrate.
- In qualche modo sembra più naturale farlo nel catch-all, una classe di eccezioni di base non dovrebbe fare altro che essere solo quella. (Potrebbe trattarsi di un singolo principio di responsabilità, ma potrebbe essere solo una sensazione sbagliata)
e un motivo per accedere alla classe di eccezioni di base:
- Attualmente il catch-all viene utilizzato solo in produzione. Sarebbe facile introdurlo nei nostri altri ambienti (sviluppo, testing) ma ciò richiederebbe alcune modifiche, poiché gli errori sono gestiti in modo diverso per ambiente, poiché sulla produzione sono tradotti in pagine di errore 404/503.
Esiste una pratica accettabile per dove registrare le eccezioni?
* La registrazione implica inizialmente la scrittura su un file di testo e potrebbe evolversi fino all'invio di e-mail per determinati tipi di eccezioni.
Alcuni chiarimenti, suggeriti dalla risposta di @ unholysampler:
Sono di fronte a un codebase 2 * 10 ^ 6 sloc, con un sacco di cose di terze parti su cui non ho controllo, e un po 'del codice che ho controllo sulle eccezioni pre-date in PHP. E c'è anche qualche codice recente schifoso, stiamo recuperando da un lungo periodo di intensa pressione in cui dovevamo praticamente smettere di pensare e appena violato.
Stiamo attivamente rifattitando per affrontare tutte le incongruenze e introdurre un approccio ragionevole alla gestione degli errori, ma ci vorrà del tempo. Sono più interessato a cosa fare fino a raggiungere il punto in cui gli errori vengono gestiti in modo appropriato. Probabilmente farò un'altra domanda su una ragionevole strategia di eccezione ad un certo punto.
La motivazione principale alla base del logging è di ricevere un'e-mail sul mio telefono ogni volta che succede qualcosa di brutto in produzione. Non mi interessa se i dump di dati diventano enormi, se lo farò farò un cron job cancellando quelli vecchi di tanto in tanto.