2011-04-12 44 views
6

He estado usando set_error_handler para anular el manejo predeterminado de errores de php con el único propósito de tener un registro personalizado de errores. pero he llegado a la conclusión de que uno simplemente no puede haber personalizado el registro de errores y registrar todos los errores posibles.¿el registro PHP personalizado y el registro de todos los posibles errores son mutuamente exclusivos?

1) Puede utilizar set_error_handler() - pero esta función, cita del Manual de PHP:

siguientes tipos de errores no pueden ser manejados con una función definida por el usuario: E_ERROR, E_PARSE, E_CORE_ERROR E_CORE_WARNING , E_COMPILE_ERROR, E_COMPILE_WARNING, y la mayoría de E_STRICT

por lo tanto - yendo esta ruta - su registro personalizado no tendrá estos errores registrados?

2) La segunda manera es utilizar register_shutdown_function() y luego ejecutar error_get_last() para obtener el error ... Pero - error_get_last() ... sólo se pone el último error ... y mientras que usted podría tener múltiples advertencias y avisos durante la ejecución del script - Este enfoque solo le permitirá registrar el error más reciente, aviso, advertencia - ¿correcto?

Así que - en mi humilde opinión - No estoy viendo ninguna forma de evitar esto. Parece que si uno quiere tener el registro de error más completo, debería simplemente quedarse con el registrador de php predeterminado, ¿no?

+0

¿Qué quiere decir con "registro de errores personalizado"? solo un formato de registro/lugar diferente o alguna lógica más dependiendo de ello? – Laimoncijus

+0

bien. Iba a guardarlos en la base de datos. pero todavía no he llegado a ese punto. – Stann

Respuesta

2

1) Eso es correcto. Es porque estos errores impedirán que todo el proceso php funcione correctamente, por lo que no tiene mucho sentido permitir que el software se recupere solo. Sin embargo, si escribes software, que rompe tan duro, tienes otros problemas además del registro.

2) Parece correcto hasta ahora. Pero también tiene set_error_handler() para esto.

4

La segunda manera es utilizar register_shutdown_function() y luego ejecutar error_get_last() para obtener el error ... Pero - error_get_last() ... sólo se pone el último error

derecho, pero si es un tipo de error que eliminó el script, sería el error correcto dentro de la función de apagado. Por si acaso, puede verificar la clave type en la matriz que devuelve para uno de los tipos capturables. Si hubiera sido capturado por otro controlador de errores, no realice ninguna acción.

Fwiw, tengo nunca se ve E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR o E_COMPILE_WARNING sucede en el mundo real. La mayoría de los errores de compilación son errores de análisis.

Cuestiones relacionadas