try new exceptions custom catch all php exception error-handling error-logging

new - try catch php mysql



¿Cómo registro las excepciones no detectadas en PHP? (7)

Yo los escribía en un archivo, y tal vez establecía un sistema de monitoreo para verificar cambios en el tamaño del archivo o la fecha de la última modificación. Webmin es una manera fácil, pero hay soluciones de software más completas.

Si sabe que es un error puntual, enviar un aviso por correo electrónico puede estar bien. Sin embargo, con un sitio web de muchos hits por minuto, nunca envíe una notificación por correo electrónico. He visto un sitio web reducido al generar cientos de correos electrónicos por minuto para decir que el sistema no se pudo conectar a la base de datos. El hecho de que también tenía un LoadAvg de> 200 debido a que el servidor de correo se ejecutaba para cada mensaje nuevo, no ayudaba en absoluto. En esa instancia, el mejor escenario fue, de lejos, que el perro guardián verificara los tamaños de los archivos y se conectara a un servicio externo para enviar un SMS (tal vez un IM) o que un sistema externo buscara un mensaje de error en una página web (que no tiene que ser visible en la pantalla, puede estar en un comentario HTML).

Descubrí cómo convertir errores en excepciones y los visualizo bien si no los atrapo, pero no sé cómo registrarlos de manera útil. Simplemente escribirlos en un archivo no será útil, ¿o sí? ¿Y correría el riesgo de acceder a una base de datos, cuando todavía no sabe qué causó la excepción?


Simplemente escribirlos en un archivo no será útil, ¿o sí?

Pero, por supuesto, es una gran cosa que hacer, mucho mejor que mostrarlos en la pantalla. Desea mostrarle al usuario una buena pantalla que dice "Perdón, nos equivocamos. Los ingenieros han sido notificados. Regrese y vuelva a intentarlo", y ABSOLUTAMENTE NO HAY DETALLE TÉCNICO, porque hacerlo representaría un riesgo de seguridad. Puede enviar un correo electrónico a un buzón compartido y registrar la excepción en un archivo o DB para revisarlo más tarde. Esta sería una mejor práctica.


Creo que depende mucho de dónde ocurrió el error. Si la base de datos está baja, iniciar sesión en la base de datos no es una buena idea;)

Utilizo la función syslog () para registrar el error, pero no tengo problemas para escribirlo en un archivo cuando estoy en un sistema que no tiene syslog-support. Puede configurar fácilmente su sistema para que le envíe un correo electrónico o un mensaje de jabber utilizando, por ejemplo, logwatch o el syslogd estándar .


Puede usar set_error_handler para establecer una excepción personalizada para registrar sus errores. Personalmente, consideraría almacenarlos en la base de datos ya que la ruta de acceso predeterminada del Exception puede proporcionar información sobre lo que la causó; esto, por supuesto, no será posible si el manejador de la base de datos activó la excepción.

También puede usar error_log para registrar sus errores. Tiene una selección de destinos de mensajes que incluyen:

Citado de error_log

  1. Registrador de sistema de PHP, utilizando el mecanismo de registro del sistema del sistema operativo o un archivo, dependiendo de en qué se configure la directiva de configuración error_log. Esta es la opción por defecto.
  2. Enviado por correo electrónico a la dirección en el parámetro de destino. Este es el único tipo de mensaje donde se usa el cuarto parámetro, extra_headers.
  3. Anexado al destino del archivo. Una nueva línea no se agrega automáticamente al final de la cadena del mensaje.

Editar: ¿Tiene markdown una etiqueta noparse para guiones bajos?


Yo segundo log4php. Normalmente lo configuro para enviar cosas como excepciones a ERROR o CRITITCAL y las escribo en syslog. Desde allí, puede hacer que su registro syslog entre en Zenoss , Nagios , Splunk o cualquier otra cosa con la que syslog pueda hablar.


También puede capturar y grabar excepciones de PHP usando Google Forms. Hay un tutorial aquí que explica el proceso.


Realmente me gusta log4php para iniciar sesión, aunque todavía no está fuera de la incubadora. Uso log4net en casi todo, y he encontrado el estilo bastante natural para mí.

Con respecto a los fallos del sistema, puede registrar el error en varios destinos (por ejemplo, tener appenders cuyo umbral sea CRÍTICO o ERROR que solo entren en juego cuando las cosas vayan mal). No estoy seguro de cuán a prueba de fallas están los appenders (si la base de datos no funciona, ¿cómo falla ese appender?), Pero podrías escribir fácilmente tu propio appender que fallará correctamente si no puede iniciar sesión.