2008-08-21 15 views
11

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?¿Cómo registro las excepciones no detectadas en PHP?

Respuesta

5

Me gusta mucho log4php para el registro, a pesar de que aún no está fuera de la incubadora. Uso log4net en casi todo, y he encontrado el estilo bastante natural para mí.

Con respecto a bloqueos del sistema, puede registrar el error en varios destinos (por ejemplo, tienen appenders cuyo umbral es CRÍTICO o ERROR que solo entran en juego cuando las cosas van 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.

+0

log4php tiene una gran funcionalidad, pero para mí funcionó muy lento! – JohnM2

+0

Ahora está fuera de la incubadora y la URL ha cambiado a http://logging.apache.org/log4php/ – Mike

11

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. Cuenta con una selección de destinos de mensajes, incluyendo:

citado de error_log

  1. registro de sistema de PHP, usando el mecanismo de registro del sistema del sistema operativo o un archivo, dependiendo de lo que 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. Agregado al destino del archivo. Una nueva línea no se agrega automáticamente al final de la cadena del mensaje.

Editar: ¿Tiene rebaja tiene una etiqueta noparse de guiones?

3

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

Pero por supuesto que es - que es una gran cosa que hacer, mucho mejor que los muestra 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.

0

Creo que depende en gran medida de dónde se produjo el error. Si la base de datos está inactiva, iniciar sesión en la base de datos no es 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 the standard syslogd.

1

Me gustaría escribirlos en un archivo, y tal vez establecer un sistema de supervisión para verificar los 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 único, enviar un aviso por correo electrónico puede estar bien. Sin embargo, con un sitio web de muchos hits por minuto, no envíe alguna vez enviando una notificación por correo electrónico. He visto un sitio web derribado 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).

0

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

0

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

+5

+1 por sugerir agregar al monopolio existente de Google sobre sus datos cruciales. –

Cuestiones relacionadas