Estoy en el proceso de refactorizar una aplicación web bastante grande. Uno de los principales problemas es el manejo de errores inconsistente y estoy tratando de encontrar una estrategia sensata. He creado un controlador de errores personalizado, a través de set_error_handler que esencialmente se convierte en errores de PHP en ErrorExceptions y una clase de excepción base personalizada, que hereda directamente de Exception .
En producción, estoy usando una excepción genérica catch-all, a través de set_exception_handler , y estoy a punto de agregar el registro de excepciones * a la mezcla. Mi dilema es dónde hacer el registro real, en la clase de excepción base o en el catch-all.
He pensado en un par de razones para registrarlo en el catch-all:
- Hay bastantes excepciones en el código que deben convertirse a algún hijo apropiado de la clase de excepción base. Hasta que eso suceda, no se registrarán todas las excepciones.
- De alguna manera, parece más natural hacerlo en el catch-all, una clase de excepción base no debería hacer más que ser solo eso. (Puede ser un principio de responsabilidad única, pero podría ser un sentimiento equivocado)
y un motivo para iniciar sesión en la clase de excepción base:
- Actualmente, el catch-all solo se utiliza en la producción. Sería fácil introducirlo en nuestros otros entornos (desarrollo, pruebas) pero eso requeriría algunos ajustes, ya que los errores se manejan de manera diferente según el entorno, ya que en producción se traducen a páginas de error 404/503.
¿Hay alguna práctica aceptable para dónde registrar excepciones?
* El registro implicará escribir en un archivo de texto al principio, y puede evolucionar hasta enviar correos para ciertos tipos de excepciones.
Algunas aclaraciones, solicitadas por respuesta de @ unholysampler :
Me enfrento a una base de código de 2 * 10 ^ 6 sloc, con muchas cosas de terceros sobre las que no tengo control, y parte del código que sí tengo control sobre las excepciones previas a las fechas en PHP. Y también hay algún código reciente de mierda, nos estamos recuperando de un largo período de intensa presión en la que virtualmente tuvimos que dejar de pensar y simplemente hackear.
Estamos refaccionando activamente para abordar todas las inconsistencias e introducir un enfoque de manejo de errores razonable, pero eso llevará algún tiempo. Estoy más interesado en qué hacer hasta que llegue al punto donde los errores se manejan de manera adecuada. Probablemente haré otra pregunta sobre una estrategia de excepción sensible en algún momento.
La principal motivación detrás del registro es recibir un correo electrónico en mi teléfono cada vez que algo malo sucede en la producción. No me importa si los volcados de datos se vuelven enormes, si lo hacen tendré un trabajo cron eliminando los antiguos de vez en cuando.